㈠ 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資料庫為用戶數據源。按要求設置,很簡單的。