㈠ sql语句怎么写管理系统计算机应用
首先配置SQLSERVER2005:
打开”Microsoft SQL Server Management Studio“ 直接用Windows 用户连接进入,再在“安全性”中的“登录名”内的“新建登录名”,你就对应的添好“确定”就可以了。
再在你对应的“数据库”里“安全性”用户,把你建的用户添加进去。
关键地方,查看“服务器 属性”在 “安全性”选上 “SQL Server 和 Windows 身份验证模式”点 “确定”系统会提示你重新启动SQL Server 你“停止”重启一下就配好了。
接着看C#连接SQL Server2005的代码语句:
strcon = strcon + @"Data Source=" + strcons[0];
strcon = strcon + "," + strcons[2] + ";";
strcon = strcon + "Network Library=" + strcons[1] + ";";
strcon = strcon + "Initial Catalog=" + strcons[3] + ";";
strcon = strcon + "User ID=" + strcons[4] + ";";
strcon = strcon + "Password=" + strcons[5] + ";";
strcon = strcon + "Persist Security Info=True";
strcons[0] 服务器名称,一般添机器的IP
strcons[1]协议DBMSSOCN(为tcp/ip协议)
strcons[2]]端口号,一般为1433
strcons[3] 数据库名
strcons[4] 用户名
strcons[5]密码
端口号也要配置一下:
在控制面板里的服务和应用程序中的SQL Server配置管理中的SQL Server 2005网络配置内的SQL
Server2005的协议TCP/IP默认为已禁用,在它的属性设置它的端口号为1433 “确定” 启动。
㈡ 测试用例需要写sql语句吗
看是什么类型的测试了,如果是嵌入式软件测试就不用了,因为一般用不上SQL,但是如果是管理软件的话,一般都要用数据库,那么就需要SQL。其实SQL是数据库的通用语言,只要你用到数据库都要会的。
㈢ 如何测试sql语句性能,提高执行效率,sql2008
一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在。 1、 打开熟悉的查看工具:PL/SQL Developer。 在PL/SQL Developer中写好一段SQL代码后,按F5,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计划。 2、 查看总COST,获得资源耗费的总体印象 一般而言,执行计划第一行所对应的COST(即成本耗费)值,反应了运行这段SQL的总体估计成本,单看这个总成本没有实际意义,但可以拿它与相同逻辑不同执行计划的SQL的总体COST进行比较,通常COST低的执行计划要好一些。 3、 按照从左至右,从上至下的方法,了解执行计划的执行步骤 执行计划按照层次逐步缩进,从左至右看,缩进最多的那一步,最先执行,如果缩进量相同,则按照从上而下的方法判断执行顺序,可粗略认为上面的步骤优先执行。每一个执行步骤都有对应的COST,可从单步COST的高低,以及单步的估计结果集(对应ROWS/基数),来分析表的访问方式,连接顺序以及连接方式是否合理。 4、 分析表的访问方式 表的访问方式主要是两种:全表扫描(TABLE ACCESS FULL)和索引扫描(INDEX SCAN),如果表上存在选择性很好的索引,却走了全表扫描,而且是大表的全表扫描,就说明表的访问方式可能存在问题;若大表上没有合适的索引而走了全表扫描,就需要分析能否建立索引,或者是否能选择更合适的表连接方式和连接顺序以提高效率。 5、 分析表的连接方式和连接顺序 表的连接顺序:就是以哪张表作为驱动表来连接其他表的先后访问顺序。 表的连接方式:简单来讲,就是两个表获得满足条件的数据时的连接过程。主要有三种表连接方式,嵌套循环(NESTED LOOPS)、哈希连接(HASH JOIN)和排序-合并连接(SORT MERGE JOIN)。我们常见得是嵌套循环和哈希连接。 嵌套循环:最适用也是最简单的连接方式。类似于用两层循环处理两个游标,外层游标称作驱动表,Oracle检索驱动表的数据,一条一条的代入内层游标,查找满足WHERE条件的所有数据,因此内层游标表中可用索引的选择性越好,嵌套循环连接的性能就越高。 哈希连接:先将驱动表的数据按照条件字段以散列的方式放入内存,然后在内存中匹配满足条件的行。哈希连接需要有合适的内存,而且必须在CBO优化模式下,连接两表的WHERE条件有等号的情况下才可以使用。哈希连接在表的数据量较大,表中没有合适的索引可用时比嵌套循环的效率要高。
㈣ 搜集SQL常用的操作语句
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
一、插入(复制)表数据
1、INSERT INTO 语句:
(1)插入新的一行数
[sql] view plain ;
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');
(2)在指定的列中插入数据
[sql] view plain ;
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');
2、SQL SELECT INTO 语句可用于创建表的备份复件
(1)在建表时复制所有数据
[sql] view plain ;
create table userinfo_new as select * from userinfo;
(2)在建表时复制部分数据
[sql] view plain ;
create table userinfo_new1 as select id,username from userinfo;
(3)在添加时复制所有数据
[sql] view plain ;
insert into userinfo_new select * from userinfo;
(4)在添加时复制部分数据
[sql] view plain ;
insert into userinfo_new(id,username) select id,username from userinfo;
二、修改表数据
Update 语句
(1)无条件更新
[sql] view plain ;
update userinfo set userpwd='111',email='[email protected]';
(2)有条件更新
[sql] view plain ;
update userinfo set userpwd='123456' where username='xxx';
三、删除表数据
1、DELETE 语句
(1)无条件删除
[sql]view plain;
daletefromuserinfo;
(2)有条件删除
[sql]view plain;
='yyy';
四、查询表数据
1、SELECT 语句:
(1)查询所有字段
[sql] view plain ;
select * from users;
(2)查询指定字段
[sql] view plain ;
select username,salary from users;
2、SELECT DISTINCT 语句
从 Company" 列中仅选取唯一不同的值,需要使用 SELECT DISTINCT 语句:
[sql] view plain ;
SELECT DISTINCT Company FROM Orders;
㈤ 如何测试sql语句性能,提高执行效率
有时候我们经常为我们的sql语句执行效率低下发愁,反复优化后,可还是得不到提高
那么你就用这条语句找出你sql到底是在哪里慢了
示例:
SET STATISTICS io ON
SET STATISTICS time
ON
go
---你要测试的sql语句
select top 100 * from
TBL_Cot_RecStaticList
go
SET STATISTICS profile
OFF
SET STATISTICS io OFF
SET STATISTICS time OFF
显示信息:
SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,占用时间 = 59 毫秒。
(100 行受影响) 表 'TBL_Cot_RecStaticList'。扫描计数 1,逻辑读取 14 次,物理读取 2
次,预读 992 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 306 毫秒。
SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
㈥ 如何使用loadrunner测试SQL查询语句的性能
第一步测试准备 第二步配置ODBC数据源 第三步录制SQL语句在Sql Server查询分析器中的运行过程 第四步优化录制脚本设置事务 第五步改变查询数量级查看SQL语句的性能 第六步在controller中运行脚本 下面开始具体的介绍 测试准备阶段我们首先要确认测试数据库服务器我们可以在本地安装SQLSERVER数据库服务端及客户端也可以确定一台装好的SQL SERVER服务器 接下来准备测试数据对数据库测试时我们要考虑的不是SQL语句是否能够正确执行而是在某数量级的情况下SQL语句的执行效率及数据库服务的运行情况所以我们分别准备不同数量级的测试数据即根据实际的业务情况预估数据库中的记录数在本次讲解中我们不考虑业务逻辑也不考虑数据表之间的关系我们只建立一张表并向此表中加入不同数量级的数据如分别加入条条条条数据查看某SQL语句的执行效率 在查询分析器中运行如下脚本 创建测试数据库 create database loadrunner_test; use loadrunner_test 创建测试数据表 create table test_table (username varchar()sex intage intaddress varchar()post int) 通过一段程序插入不同数量级的记录具体的语法在这里就不多说了 declare @i int set @i=while @i< //循环次可以根据测试数据情况改变插入条数 begin BEGIN TRAN T insert into test_table (usernamesexageaddresspost) values (户瑞海+cast(@i as varchar)@i@i+北京市和平里+cast(@i as varchar)+号); IF @@ERROR <> begin rollback; select @@error end else begin commit; set @i = @i+ end end 好了执行完上述语句后建立的数据表中已经有条记录了下面进行第二步的操作配置ODBC数据源为了能让loadrunner能够通过ODBC协议连接到我们建立的SQL SERVER数据路我们需要在本机上建立ODBC数据源建立方法如下 控制面板—性能和维护—管理工具—数据源(ODBC)添加在列表中选择SQL SERVER点击完成根据向导输入数据源名称链接的服务器下一步输入链接数据库的用户名和密码更改链接的数据库完成ODBC的配置如果配置正确的话在最后一步点击测试数据源会弹出测试成功的提示 配置好ODBC数据源后就要录制SQL语句在查询分析器中的执行过程了 打开loadrunner选择ODBC协议 在start recording中的application type 选择win applicationprogram to record中录入SQL SERVER查询分析器的路径\安装目录\isqlwexe 开始录制首先通过查询分析器登录SQL SERVER在打开的查询分析器窗口中输入要测试的SQL语句如select * from test_table; 在查询分析器中执行该语句执行完成后结束录制 好了现在就可以看到loadrunner生成的脚本了(由于脚本过长在这里就不粘贴了有需要的朋友可以加我QQ我把脚本发给你们)通过这些语句我们可以看出登录数据库的过程执行SQL语句的过程 接下来我们来优化脚本我们分别为数据库登录部分和执行SQL语句的部分加一个事物在增加一个double的变量获取事务执行时间简单内容如下 Action() { double trans_time; //定义一个double型变量用来保存事务执行时间 lr_start_transaction(sqserver_login); //设置登录事务的开始 lrd_init(&InitInfo DBTypeVersion); //初始化链接(下面的都是loadrunner生成的脚本了大家可以通过帮助查到每个函数的意思) lrd_open_context(&CtxLRD_DBTYPE_ODBC ); lrd_db_option(Ctx OT_ODBC_OV_ODBC ); lrd_alloc_connection(&Con LRD_DBTYPE_ODBC Ctx /*Unused*/ ); ……………… trans_time=lr_get_transaction_ration( sqserver_login ); //获得登录数据库的时间 lr_output_message(sqserver_login事务耗时 %f 秒 trans_time); //输出该时间 lr_end_transaction(sqserver_login LR_AUTO); //结束登录事务 lr_start_transaction(start_select);//开始查询事务 lrd_cancel( Csr /*Unused*/ ); lrd_stmt(Csr select * from test_table;\r\n /*None*/ );//此句为执行的SQL lrd_bind_cols(Csr BCInfo_D ); lrd_fetch(Csr PrintRow ); …………… trans_time=lr_get_transaction_ration( start_select ); //获得该SQL的执行时间 lr_output_message(start_select事务耗时 %f 秒 trans_time); //输出该时间 lr_end_transaction(start_select LR_AUTO); //结束查询事务 优化后在执行上述脚本后就可以得到登录到数据库的时间及运行select * from test_table这条语句的时间了当然我们也可以根据实际情况对该条语句进行参数化可以测试多条语句的执行时间也可以将该语句改为调用存储过程的语句来测试存储过程的运行时间 接下来把该脚本在controller中运行设置虚拟用户数设置集合点这些操作我就不说了但是值得注意的是没有Mercury 授权的SQL SERVER用户license在运行该脚本时回报错提示You do not have a license for this Vuser type Please contact Mercury Interactive to renew your license我们公司穷啊买不起loadrunner所以我也无法继续试验希望有license朋友们监控一下运行结果! 最起码在VUGen中运行该脚本我们可以得到任意一个SQL语句及存储过程的执行时间如果我们测试的B/S结构的程序我们也可以通过HTML协议录制的脚本在CONTROLLER中监控SQL SERVER服务器的性能情况这样两方面结合起来就可以对数据库性能做一个完整的监控了
㈦ 如何通过注入SQL语句获取网站管理权限及安全措施
×
loading..
资讯
安全
论坛
下载
读书
程序开发
数据库
系统
网络
电子书
微信学院
站长学院
QQ
手机软件
考试
系统安全|
网站安全|
企业安全|
网络安全|
工具软件|
杀毒防毒|
加密解密|
首页 > 安全 > 网站安全 > 正文
如何通过注入SQL语句获取网站管理权限及安全措施
2011-04-19
0 个评论
收藏
我要投稿
我们知道网站后台需要验证用户的输入, 如果不这样做, 用户甚至可以输入一些SQL语句操作后台的数据库,
这么好玩的事情一直没有真正体验过. 前几日学校搞了一个"你最喜欢的辅导员"投票活动, 网站估计是给某个学生团队做的,
结果经同学破解了这个网站的管理员帐号和密码, 我遂向他请教了原理, 也了解了他破解的步骤, 自己又实践了一遍. 感谢经同学,
没有他我就不知道这些, 也不可能有这篇博客.
本文破解网站的网址是www.2cto.com 本文的内容不适用于这个网站了.我整理了详细的破解过程跟大家分享, 文中的逻辑比较强, 需要读者耐心的看. 但文本讲述的是破解步骤, 是一般思路, 如果您有疑问, 请留言, 我们交流讨论 :)
一 网站是否存在SQL注入漏洞
网站一般包含一张用户表(用户名和密码)和一张管理员信息表(管理员名称和密码), 输入用户名和密码之后, 一般做法是后台都会执行一条SQL语句,
查询有没有对应的用户和密码, 比如SELECT * FROM SomeTable WHERE UserName = $UserName AND
pwd = $pwd, 如果这条语句返回真, 那么登录操作就完成了.
试想一下如果在学号和密码文本框中输入or=or,
并提交的话, 上面提到的SQL语句就变成了SELECT * FROM SomeTable WHERE UserName = or=or AND
pwd = or=or, 这个语语句变成了一个逻辑表达式, 表达式包含几段, 分别为:
1. SELECT * FROM SomeTable WHERE UserName = (假)
or
2. = (真)
or
3. (假)
and
4. pwd = (假)
or
5. = (真)
or
6. (假)
最后整个逻辑表达式为0|1|0&0|1|0, 这个结果为真(在执行到"0|1|..."的时候整个表达式省略号中的就不计算了, 因为"或"前面已经是真), 因此可以登录成功, 事实上也登录成功了.
二 破解后台数据库的原理
在用户名和密码的文本框中输入or=or, 截至上面所示的第2步, 表达式值为真,
因为后面紧接了一个"或", 所以无论在这后面的表达式是什么, "真或者假""真或者真"都是为真的. 关键就是or=or中间的那个=,
=表示一个字符, 永远为真. 如果我们将这个=改成某个SQL表达式, 如果这个表达式为真, 那么整个表达式就为真.
后面的几个步骤要求用户名和密码文本框中都输入同样的文本, 原因是: 后台的语句格式可能是SELECT * FROM SomeTable
WHERE UserName = $UserName AND pwd = $pwd, 也有可能是SELECT * FROM SomeTable
WHERE pwd = $pwd AND UserName = $UserName, 无论哪一种情况, 只要用户名和密码都输入的文本是一样的,
只要文本中包含的SQL表达式为真, 那么整个表达式就为真. 这样写带来的另一个好处是复制粘贴很方便.
通过写一些SQL表达式来一次一次的测试出数据库里的内容.
三 获取后台数据库的表名
如果将表达式替换为(SELECT COUNT(*) FROM 表名)<>0,
这个表达式用来获取一个表中有多少条记录, 需要做的就是猜这个表名是什么, 猜中了的话, 那么这个表中的记录条数肯定就不会等于0,
那么这个表达式的值就是真的. 常用的表名也就是那么一些, 一个个的代进去试, 最后发现有个叫做admin的表, 它的字段不为空. 很显然,
这个表是用来存放管理员信息的.
四 获取后台数据库表的字段名
现在已经知道这个表叫做admin了, 接下来想办法得到这个表中的字段.
把表达式替换成(SELECT COUNT(*) FROM admin WHERE LEN(字段名)>0)<>0,
这个表达式用来测试admin这个表中是否包含这个字段. LEN(字段名)>0表示这个字段的长度大于0, 在这个字段存在的情况下,
LEN(字段名)>0是始终为真的. 如果包含的话这个字段的话, 整条SELECT语句返回的数字肯定不为0, 也就是说整个表达式为真,
从而得到字段名.
按照这样的方法, 靠猜共得出了三个很关键的字段:id, admin, pass.
五 获取字段的长度
目前已得到的信息是有个admin表, 表中有id, admin, pass字段. 后台中存储用户名和密码, 常规做法是存储它们进行MD5加密后的值(32位), 现在测试一下是不是这样.
把表达式替换为(SELECT COUNT(*) FROM admin WHERE LEN(字段名)=32)<>0, 将admin和pass代进去结果是真, 说明后台存储管理员帐号和密码用的是加密后32位的字段.
六 获取管理员帐号和密码
MD5加密后的字符串包含32位, 且只可能是由0-9和A-F这些字符组成.
1. 获取管理员帐号
将表达式改成(SELECT COUNT(*) FROM admin WHERE LEFT(admin,1)=A)>0,
意思是我猜测某个adimin帐号的第一个字符是A, 如果成功则表达式成立. 失败的话, 把A换成0-9和B-F中的任意字符继续试, 知道成功.
如果成功了, 我再继续猜这个帐号的第二个字符, 假如第一个字符是5, 我猜测第二个字符是A, 那将表达式改成(SELECT COUNT(*)
FROM admin WHERE LEFT(admin,2)=5A)>0. 可以发现字符串中LEFT()函数中的1变成了2,
另外5A代码左边两个字符是5A, 其中5已经确定下来了. 就这样重复不断的猜, 直到得到整个32位的MD5加密后的字符串.
2. 获取该帐号对应的的id
为什么需要获取该帐号对应的id? 原因如下: 按照上一条是可以得到帐号和密码的, 但一张表中可以有若干个管理员帐号和密码, 怎么对应起来呢? 需要通过id. 一个id对应一条记录, 一条记录只有一对匹配的帐号和密码.
将表达式改成(SELECT COUNT(*) FROM admin WHERE LEFT(admin,1)=5 AND id=1)>0,
上一条假设了某帐号第一个字符是5, 只要这个表达式中的"AND id = 1"正确, 那么就可以得知该帐号的id是1. 如果不是1,
换成其它的数字一个个的试一试.
3. 获取帐号对应的密码
现在已经猜出了某管理员的帐号,
并且知道对应的id是多少(假设得出来是4), 现在只要得到该条记录中记录的密码是什么. 同理, 将表达式改成(SELECT COUNT(*)
FROM admin WHERE LEFT(pass,1)=A AND id=4)>0, 注意id已经是知道了的4,
现在要一个个的猜pass中从第1个到第32个字符是什么, 方法同"获取管理员帐号"方法. 最后可以得到一个32位的MD5加密后的字符串(密码).
*注: 如果嫌手工得到每个字符是什么太麻烦, 可以自己用C#写一个程序, 模拟一下登录, 通过控制一个循环, 可以很快得到结果.
七 将MD5加密后的帐号和密码转成明文
网上有一些网站数据库里存储了海量(几万亿条)的MD5加密后的暗文对应的明文, 只需输入你需要查找的MD5加密后的字符串就可以查看到明文是什么.
㈧ SQL Server 2005 数据库管理SQL 语句
SQL语言完整性约束:
1、唯一约束:unique
2、主键约束:primarykey
3、标识列:identity
4、检查约束:check
5、外键约束:foreign key
6、默认值约束:defauit
7、不为空约束:not null
数据库:database
表:table
主文件:filespec
事务日志文件:filegroup
显示数据库文件:on
显示日志文件:log on
文件名: name
存储路径:filename
文件占据空间:size
最大存储空间:maxsize
文件增长量:filegrowth
连接 :references
列:column
删除表:drop cloumn (表名 行)
删除文件:1、指定位置:alter database 文件名2:删除:remove file 文件名
更改文件:1、指定位置:alter database 文件名2:更改:modify file文件名
添加:add
切换:use
连接:on
约束关键字:constraint
选定目标关键字:select
不重复关键字:distinct
简化关键字:in 与where一块使用
最左,右关键字:top
指定表关键字:from
改名关键字:as
插入数据关键字:insert 和into values一块使用
选定位置关键字:into
具体列关键字:values
更新数据关键字:update 和set where一块使用
选定记录关键字: set
选择列关键字:where
删除数据关键字:delete 和from where一块使用
指定位置关键字:from
选择列关键字:where
查询排序关键字:order by
选择前n行:top
升序排序:desc
降序排序:asc
查询分组关键字:group by
替换关键字:replace
筛选关键字:having
求和函数:sum
求平均数:avg
计算函数:count
求最大值函数:max
最小值函数:min
允许用户操作数据库:grant
拒绝用户权限:deny
废除用户权限:revoke
拒绝或废除用户权限语句:cascade
SQL高级查询
连接具体位置关键字:on
交叉联接关键字:cross jojn
内联接:inner join (具体到列)
左外联接:left(左)join
右外联接:right(右)join
查询具体条件:exists (也可以看作一次测试)
联合查询:unlon
显示全部:all
㈨ 对于大量的sql语句大家是怎么管理的
我觉得这个还要看你的sql的具体语句,比如,有没有建库等语句,如果只有insert into语句,且符合sql语法,那么,直接用mysql_query($sql)应该就可以了
㈩ SQL Server2000测试SQL语句的问题
1、
Conn.Open ("driver={SQL Server};database=pubs; " &"server=local; uid=sa; pwd=163") 中的server=local是您的服务器名称,你可以在我的电脑的属性中查到
2、打开控制面板-管理工具-数据源,注册puds数据库为用户数据源。按要求设置,很简单的。