当前位置:首页 » 编程语言 » SQL测试站

SQL测试站

发布时间: 2022-09-11 21:09:49

① 怎样对sql注入渗透测试使web站点可以通过任意用户名登录

如果是你自己的 web站点,规则由你定,你就可以通过任意用户名登录,如果是别人的web站点,要想通过任意用户名登录,这就是黑客的工作了

② SQL SERVER 连接数据库时测试数据不成功怎么办

1、要连接数据库首先需要配置连接串,配置上服务器数据库等信息//connString = "Data Source=服务器名称;Initial Catalog=数据库名称;User ID = 用户名;Pwd = 密码";。

③ 静态SQL和动态SQL的区别和测试实例

所谓SQL的动态和静态,是指SQL语句在何时被编译和执行,二者都是用在SQL嵌入式编程中的。
静态SQL:在高级语言中,如果嵌入了SQL语句,而这个SQL语句的主体结构已经明确,例如在c的一段代码中有一个待执行的SQL“select * from t1 where c1>5”,在编译阶段,就可以将这段SQL交给数据库管理系统去分析,数据库软件可以对这段SQL进行语法解析,生成数据库方面的可执行代码,这样的SQL称为静态SQL,即在编译阶段就可以确定数据库要做什么事情。
动态SQL:如果嵌入的SQL没有明确给出,如在c中定义了一个字符数组类型的变量name:char name[32];,然后采用prepared Statement对象的execute方法去执行这个sql,该sql的值可能等于从文本框中读取的一个SQL或者从键盘输入的SQL,但具体是什么,在编译时无法确定,只有等到程序运行起来,在执行的过程中才能确定,这种SQL叫做动态SQL。例如每一种数据库软件都有能够执行SQL语句的界面,那个界面接收的SQL就是动态SQL,因为数据库厂商在做这个界面时,并不知道用户会输入哪些SQL,只有在该界面执行后,接收了用户的实际输入,才知道SQL是什么。
注意:在SQL中如果某些参数没有确定,如”select * from t1 where c1>? and c2#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>

EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE SQLDA;
/*此函数属于静态SQL编程*/
int DBSelect_static(){
EXEC SQL BEGIN DECLARE SECTION;
char _typename[32];
short _length;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT typename,length
INTO :_typename,:_length
FROM syscat.columns
WHERE tabname='SYSCOLUMNS' and colname='DEFAULT';
printf("【typename:%s】【length:%d】\n",_typename,_length);
}
/*此函数属于静态SQL编程:指定函数参数作为SQL语句的变量*/
int DBSelect_static_param(char *tbl_str,char *col_str){
EXEC SQL BEGIN DECLARE SECTION;
char _typename1[32];
short _length1;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT typename,length
INTO :_typename1,:_length1
FROM syscat.columns
WHERE tabname='tbl_str' and colname='col_str';
printf("【typename:%s】【length:%d】\n",_typename1,_length1);
}
/*此函数属于动态SQL编程:SQL语句的结构是不确定的,需要根据用户的输入补全SQL语句*/
int DBUpdate_dynamic(){
EXEC SQL BEGIN DECLARE SECTION;
char _address1[32];
char _tablename[32];
char _tmp[32];
char buf[256];
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT count(address1) INTO :_tmp FROM cisaddressinfo WHERE customid='100000100000000000178';
if(0==_tmp) {printf("Not Found!\n");return -1;}
memset(buf,0x00,sizeof(buf));
sprintf(buf,"update ");
printf("Pls input : tablename ->");
scanf("%s",&_tablename);
strcat(buf,_tablename);
strcat(buf," set address1=? where customid='100000100000000000178'");
EXEC SQL PREPARE project FROM :buf;
if(sqlca.sqlcode) perror("PREPARE");
printf("Pls input : address1 ->");
scanf("%s",&_address1);
EXEC SQL EXECUTE project USING :_address1;
if(sqlca.sqlcode) perror("EXECUTE");
EXEC SQL COMMIT WORK;
if(sqlca.sqlcode) perror("COMMIT");
}
/*此函数属于动态SQL编程:使用sqlda数据结构组装复杂多变的动态SQL*/
int DBSelect_dynamic(){
EXEC SQL BEGIN DECLARE SECTION;
char hostVarStmt[256];
EXEC SQL END DECLARE SECTION;
// 声明两个 SQLDA 指针,minsqlda 将是一个最小的 SQLDA 结构,用于 PREPARE 语句,
// 此时结果集的字段数量未知,所以只需一个最小的 SQLDA,即包含 HEADER 和一个 SQLVAR
struct sqlda * minsqlda = (struct sqlda*)malloc(SQLDASIZE(1));
struct sqlda * fulsqlda = NULL;

strcpy(hostVarStmt, "select WUID from workprocess where muid = '185001'");
// PREPARE 将填写 minsqlda 的 header,sqldabc 为 SQLDA 总长度,sqln 为 SQLVAR 数量,即字段数量
EXEC SQL PREPARE STMT INTO :*minsqlda FROM :hostVarStmt;
// 根据从 minsqlda 中获取的长度,分配完整的 SQLDA 结构 fulsqlda,其中将包括合适数量的 SQLVAR 结构
//结构sqlda的成员变量sqld返回select查询语句的字段的数目,可以根据此变量分配内存
fulsqlda = (struct sqlda *)malloc(SQLDASIZE(minsqlda->sqld));
// 使用 DESCRIBE 语句,获取结果集中每个字段的描述信息,包括各字段的类型 (sqltype) 和长度 (sqllen)
EXEC SQL DESCRIBE STMT INTO :*fulsqlda;
int i;
for(i=0;i<minsqlda->sqld;i++)
{
// 根据每个字段的长度,分配内存,将地址存储在对应 SQLVAR 的 sqldata 中
// fulsqlda->sqlvar[i].sqldata=malloc(fulsqlda->sqlvar[i].sqllen);
fulsqlda->sqlvar[i].sqldata=malloc(32);
fulsqlda->sqlvar[i].sqlind=malloc(sizeof(short));
}

// 声明游标
EXEC SQL DECLARE c1 CURSOR FOR STMT;
EXEC SQL OPEN c1;

EXEC SQL WHENEVER not found goto no_more_data;
// 读取记录,记录中每个字段的内容将写入 fulsqlda 中对应 SQLVAR 结构的 sqldata 指向的内存
// EXEC SQL FETCH c1 USING DESCRIPTOR :*fulsqlda;
// 循环读取所有记录
for (;;)
{
EXEC SQL FETCH c1 USING DESCRIPTOR :*fulsqlda;
for(i=0;i<minsqlda->sqld;i++){
printf("%d %s\n",fulsqlda->sqlvar[i].sqltype,fulsqlda->sqlvar[i].sqldata);
usleep(10000);
}
}
return 0;
no_more_data:
printf("\nEND of Data\n");
free(minsqlda);
free(fulsqlda);
EXEC SQL CLOSE c1;
return 0;
}
int main(){
/*连接数据库*/
EXEC SQL CONNECT TO ezeelink USER ezeelink USING EA704075ezeelink;
DBSelect_static();
DBSelect_static_param("SYSCOLUMNS","DEFAULT");
DBUpdate_dynamic();
DBSelect_dynamic();

no_more_data:
;

return 0;
}

案例输出结果如下:
【typename:VARCHAR】【length:254】
【typename:VARCHAR】【length:254】
Pls input : tablename ->cisaddressinfo
Pls input : address1 ->ShangHai
452 cis505
452 cis506
452 pub806
452 ips007
452 ips032
452 dps302
END of Data
注意:
如果使用动态SQL编程编写select查询语句并保存结果,需要使用sqlda数据结构的,同时使用SQL的特性和功能,如:PREPARE ,EXECUTE ,DESCRIBE , DECLARE CURSE C1 FOR … , OPEN CURSE , CLOSE CURSE ….等等
建议:
动态SQL适用于表名及查询字段名未知的情况。在已知查询字段名及表名的情况下,使用动态SQL(字符串拼接方式)会增加硬解析的开销,在这种情况下,建议使用静态SQL,这样可以提高执行效率。在过程过程用拼凑的动态sql效率并不高,有时候还不如程序直接传递sql.静态SQL是前置编译绑定,动态SQL是后期执行时才编译绑定

④ 百万数据下几种SQL性能测试

由于在参与的实际项目中发现当mysql表的数据量达到百万级时,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍。曾经测试对一个包含400多万条记录(有索引)的表执行一条条件查询,其查询时间竟然高达40几秒,相信这么高的查询延时,任何用户都会抓狂。因此如何提高sql语句查询效率,显得十分重要。以下是网上流传比较广泛的30种SQL查询语句优化方法:
1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0

⑤ 求问如何测试站点数据库升级过程

要为升级测试数据库,请使用 /testdbupgrade 安装程序命令行开关,如下所示: Setup02/testdbupgrade SMS_<sitecode> 当运行此命令时,将启动安装程序先决条件检查程序并验证要测试的数据库是否满足测试的要求。该测试必须在受支持的 Microsoft SQL Server022005 版本上运行,且在为准备测试复制或备份 SQL Server 数据库复制之前,必须未对数据库配置它。可以在 ConfigMgrPrereq.log 日志文件中查看先决条件检查的结果,该文件是在系统驱动器根目录中创建的。注意 如果SMS 站点数据库是从启用了 SQL Server 数据库复制的 SMS 2003 站点数据库进行复制或还原的,则数据库升级测试会失败。这是因为当对 SMS 2003 站点数据库启用 SQL Server 数据库复制时,运行 SQL Server 的计算机会修改包含在发布中的 SQL Server 表。当数据库还原为另一个数据库时,在该还原的 SMS 站点数据库中的 setup /testdbupgrade 会失败。
安装程序先决条件检查程序成功验证测试的所有先决条件都满足后,即已完成数据库升级测试。可以在 ConfigMgrSetup.log 日志文件中查看执行的操作及其结果,该日志文件是在系统驱动器根目录中创建的。如果数据库升级测试成功,则可确定升级过程的数据库部分一定会成功。在升级生产站点数据库之前,必须更正测试中所遇到的任何问题。如果此测试失败,则表明数据库与 Configuration Manager 2007 不兼容,需要全新安装。小心 运行Setup02/testdbupgrade 安装程序开关后,如果不完成升级,SMS 站点数据库将不能与 SMS 的早期版本兼容。务必在 SMS022003 站点数据库副本上运行此测试,而不是在源站点数据库上运行。
根据宿主要测试的站点数据库的 SQL Server 版本,请使用下列过程之一来对站点数据库进行升级测试。注意 有关受支持的 SQL Server 版本列表,请参阅Configuration Manager 支持的配置。
通过复制数据库对 SQL Server 2005 宿主的 SMS022003 站点数据库进行升级测试记录SQL Server 数据及日志文件的大小。您需要将这些大小与完成数据库升级测试后的文件的大小进行比较。在宿主站点数据库的 SQL Server 上,登录到 Microsoft SQL Server Management Studio 并确保 SQL Server 代理在运行。注意 要启动 SQL Server Management Studio,必须在 SQL Server 上安装 SQL Server 工作站组件。
确保SQL Server 配置为自动增长,且运行 SQL Server 的计算机上有足够的磁盘空间来成功完成测试。(所需的磁盘空间量因当前站点数据库的大小而异。)如有需要,请对站点数据库禁用 SQL Server 复制。使用复制数据库向导复制站点数据库。要在 SQL Server Management Studio 中启动“复制数据库向导”,请右键单击“<站点数据库名称>”,然后单击“任务”,再单击“复制数据库”。注意 您可以对副本进行计划,使它立即运行或稍后运行。您还可以将数据库复制到本地数据库服务器或其他 SQL Server 计算机上。建议将数据库复制到不宿主站点数据库的远程 SQL Server 计算机上以执行此过程。
打开命令提示符,导航到宿主数据库副本的 SQL Server 计算机上的 Configuration Manager 安装文件目录,然后输入下列文本:setup.exe /testdbupgrade <复制的数据库名称>。查看位于系统驱动器根目录中的 ConfigMgrPrereq.log 和ConfigMgrSetup.log 日志文件,以验证数据库升级测试是否成功。在升级生产站点数据库之前,必须更正测试升级过程中遇到的任何问题。记录SQL Server 数据和日志文件的大小,并将它们与步骤 1 中记录的大小进行比较。这样将确定成功完成站点数据库升级所需的磁盘空间量。通过将站点数据库备份还原到运行 SQL Server 2005 的远程计算机,对由 SQL Server 2000 宿主的 SMS 2003 站点数据库进行升级测试记录SQL Server 数据及日志文件的大小。您需要将这些大小与完成数据库升级测试后的文件的大小进行比较。确保SQL Server 配置为自动增长,且运行 SQL Server 的计算机上有足够的磁盘空间来成功完成测试。(所需的磁盘空间量因当前站点数据库的大小而异。)如有需要,请对站点数据库禁用 SQL Server 复制。使用SMS 站点备份维护任务来备份 SMS 2003 站点数据库。要强制立即进行站点备份,请从命令提示符界面运行命令 net start sms_site_backup。注意 此外,您还可以停止 SMS 站点服务器和 SQL Server 上的所有 SMS 服务,然后使用 SQL Server 企业管理器来备份 SMS 站点数据库。
将站点数据库备份复制到运行 SQL Server022005 的其他计算机。在SQL Server022005 计算机上,使用与您备份的数据库相同的名称手动创建新的数据库,然后将数据库备份还原到其中。打开命令提示符,导航到 Configuration Manager 安装文件目录,然后输入下列文本:setup.exe /testdbupgrade <数据库名称>。查看位于系统驱动器根目录中的 ConfigMgrPrereq.log 和ConfigMgrSetup.log 日志文件,以验证数据库升级测试是否成功。在升级生产站点数据库之前,必须更正测试升级过程中遇到的任何问题。记录SQL Server 数据和日志文件的大小,并将它们与步骤 1 中记录的大小进行比较。这样将确定成功完成站点数据库升级所需的磁盘空间量。

⑥ 如何解决SQL查询速度太慢

1. 执行计划中明明有使用到索引,为什么执行还是这么慢?

2. 执行计划中显示扫描行数为 644,为什么 slow log 中显示 100 多万行?
a. 我们先看执行计划,选择的索引 “INDX_BIOM_ELOCK_TASK3(TASK_ID)”。结合 sql 来看,因为有 "ORDER BY TASK_ID DESC" 子句,排序通常很慢,如果使用了文件排序性能会更差,优化器选择这个索引避免了排序。
那为什么不选 possible_keys:INDX_BIOM_ELOCK_TASK 呢?原因也很简单,TASK_DATE 字段区分度太低了,走这个索引需要扫描的行数很大,而且还要进行额外的排序,优化器综合判断代价更大,所以就不选这个索引了。不过如果我们强制选择这个索引(用 force index 语法),会看到 SQL 执行速度更快少于 10s,那是因为优化器基于代价的原则并不等价于执行速度的快慢;
b. 再看执行计划中的 type:index,"index" 代表 “全索引扫描”,其实和全表扫描差不多,只是扫描的时候是按照索引次序进行而不是行,主要优点就是避免了排序,但是开销仍然非常大。
Extra:Using where 也意味着扫描完索引后还需要回表进行筛选。一般来说,得保证 type 至少达到 range 级别,最好能达到 ref。
在第 2 点中提到的“慢日志记录Rows_examined: 1161559,看起来是全表扫描”,这里更正为“全索引扫描”,扫描行数确实等于表的行数;
c. 关于执行计划中:“rows:644”,其实这个只是估算值,并不准确,我们分析慢 SQL 时判断准确的扫描行数应该以 slow log 中的 Rows_examined 为准。
4. 优化建议:添加组合索引 IDX_REL_DEVID_TASK_ID(REL_DEVID,TASK_ID)

优化过程:
TASK_DATE 字段存在索引,但是选择度很低,优化器不会走这个索引,建议后续可以删除这个索引:
select count(*),count(distinct TASK_DATE) from T_BIOMA_ELOCK_TASK;+------------+---------------------------+| count(*) | count(distinct TASK_DATE) |+------------+---------------------------+| 1161559 | 223 |+------------+---------------------------+

在这个 sql 中 REL_DEVID 字段从命名上看选择度较高,通过下面 sql 来检验确实如此:
select count(*),count(distinct REL_DEVID) from T_BIOMA_ELOCK_TASK;+----------+---------------------------+| count(*) | count(distinct REL_DEVID) |+----------+---------------------------+| 1161559 | 62235 |+----------+---------------------------+

由于有排序,所以得把 task_id 也加入到新建的索引中,REL_DEVID,task_id 组合选择度 100%:
select count(*),count(distinct REL_DEVID,task_id) from T_BIOMA_ELOCK_TASK;+----------+-----------------------------------+| count(*) | count(distinct REL_DEVID,task_id) |+----------+-----------------------------------+| 1161559 | 1161559 |+----------+-----------------------------------+

在测试环境添加 REL_DEVID,TASK_ID 组合索引,测试 sql 性能:alter table T_BIOMA_ELOCK_TASK add index idx_REL_DEVID_TASK_ID(REL_DEVID,TASK_ID);
添加索引后执行计划:
这里还要注意一点“隐式转换”:REL_DEVID 字段数据类型为 varchar,需要在 sql 中加引号:AND T.REL_DEVID = 000000025xxx >> AND T.REL_DEVID = '000000025xxx'

执行时间从 10s+ 降到 毫秒级别:
1 row in set (0.00 sec)
结论
一个典型的 order by 查询的优化,添加更合适的索引可以避免性能问题:执行计划使用索引并不意味着就能执行快。

⑦ 什么是sql注入测试

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。我们需要对应用站点做测试,判断是否存在SQL注入漏洞。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。[1]比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.x0dx0a更多关于什么是sql注入测试,进入:https://m.abcgonglue.com/ask/7c74091615830905.html?zd查看更多内容

⑧ 如何测试一个SQL脚本(SQL查询 存储过程 触发器)

直接用SQL Server2008自带的调试工具,进行调试。
或者你直接改写成另外的不带CREATE PROCEDURE语句的DECLARE 语句进行测试。

⑨ 如何准确测试SQL2000中,某一个数据库当前的连接数量;如何改善连接量达到某数值时,数据库慢,卡死情况

连接数量有三种方法查看
1.通过系统的“性能”来查看:
开始->管理工具->性能(或者是运行里面输入 mmc)然后通过
添加计数器添加 SQL 的常用统计 然后在下面列出的项目里面选择用户连接就可以时时查询到sql server数据库连接数了。
不过此方法的话需要有访问那台计算机的权限,就是要通过windows账户登陆进去才可以添加此计数器。

2.通过系统表来查询:
SELECT * FROM
[Master].[dbo].[SYSPROCESSES] WHERE [DBID]
IN
(
SELECT
[DBID]
FROM
[Master].[dbo].[SYSDATABASES]
WHERE
NAME='databaseName'
)
databaseName 是需要查看的数据库,然后查询出来的行数,就是当前的sql server数据库连接数。不过里面还有一些别的状态可以做参考用。

3.通过系统过程来查询:
SP_WHO 'loginName'
loginName 是当然登陆Sql的用户名,一般程序里面都会使用一个username来登陆SQL这样通过这个用户名就能查看到此用户名登陆之后占用的连接了。
如果不写loginName,那么返回的就是所有的sql server数据库连接。

至于如何改善数据库性能,就是属于数据库调优方面的工作了,通常有以下几种调优方法:
1 查看数据库中造成数据库访问变慢的语句,通常是执行数量较多,执行速度慢的语句,对这些语句进行执行计划分析,并重写语句来优化,最常见的就是not in语句使用外连接语句代替;
2 根据语句中查询访问条件中的谓词,创建对应的索引,以提高查询的执行效率;
3 在数据存储上优化,将数据文件根据某个频繁访问属性的属性值进行水平分片,提高对应表的访问效率(oracle支持,sql server2000没有此功能)
4 重新设计业务逻辑结构,避免执行代价高的查询语句
5 服务器和数据库软件的能力终究还是有限的,无论如何优化当达到一定的访问数量是还是会超出负载,此时就需要考虑可扩展规模的分布式并行数据存储架构了。

⑩ SQL对测试人员有什么好处,在那些测试中会用到SQL

谢谢!说到了一些,但是还是不大了解,就是我去面试的时候,都会被问到你会不会数据库,SQL就是数据库的一种。

热点内容
手机手势密码忘了怎么办 发布:2025-01-12 17:14:51 浏览:486
这手机配置有什么颜色的电视机 发布:2025-01-12 17:02:19 浏览:933
阁源码 发布:2025-01-12 16:48:08 浏览:131
组装机箱搭建服务器 发布:2025-01-12 16:46:58 浏览:512
风险资产配置理论有哪些 发布:2025-01-12 16:46:13 浏览:982
小程序分销源码 发布:2025-01-12 16:42:41 浏览:48
linux查看系统硬件 发布:2025-01-12 16:34:26 浏览:969
安卓手机怎么设置独享标志 发布:2025-01-12 16:27:56 浏览:933
我的世界如何把材质包放进服务器 发布:2025-01-12 16:11:14 浏览:57
使用hmailserver搭建邮件服务器 发布:2025-01-12 16:05:43 浏览:810