當前位置:首頁 » 編程語言 » 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 12:17:32 瀏覽:890
mac終端打開文件夾 發布:2025-01-12 12:17:31 瀏覽:295
第一次安裝如何設置mysql密碼 發布:2025-01-12 12:09:02 瀏覽:280
如何刪除微信伺服器上收藏 發布:2025-01-12 12:08:20 瀏覽:102
吃雞游戲安卓區轉蘋果區怎麼轉 發布:2025-01-12 11:34:00 瀏覽:880
網頁版c語言 發布:2025-01-12 11:21:01 瀏覽:864
安卓怎麼更改排位常用英雄 發布:2025-01-12 11:10:33 瀏覽:561
拆遷的100萬如何配置 發布:2025-01-12 11:08:52 瀏覽:575
如何配置ph值為次氯酸鈉的ph值 發布:2025-01-12 11:08:52 瀏覽:437
pythonarraynumpy 發布:2025-01-12 11:01:47 瀏覽:293