?
問題三、如何讓指定用戶可以對數(shù)據(jù)表進行Truncate操作?
???????? Truncate在對大表全刪除操作時,會明顯比Delete語句更快更有效,但是因為它不需要存放日志,并且一定是全表刪除,所以造成數(shù)據(jù)的不可恢復(fù)性。也說明了它的危險性。
???????? 但是,執(zhí)行Truncate需要有表擁有者、系統(tǒng)管理員、db_owner、db_ddladmin這些里面的其中一種高權(quán)限角色才能執(zhí)行。
???????? 對此,可以使用05之后的EXECUTE AS表達式來實現(xiàn)權(quán)限內(nèi)容的切換:
1.??????切換登錄:EXECUTE AS LOGIN
2.??????切換用戶:EXECUTE AS USER
3.??????切換執(zhí)行權(quán)限:EXECUTE AS owner/’user name’,利用高用戶權(quán)限來執(zhí)行作業(yè)。此步驟可以在低權(quán)限實體下執(zhí)行高權(quán)限操作,也能避免安全性漏洞。
另外,只有EXECUTE AS Caller可以跨數(shù)據(jù)庫執(zhí)行,而其他方式進行的權(quán)限切換僅限制于本數(shù)據(jù)庫。
注意:執(zhí)行EXECUTE AS USER模擬使用者切換時,需要先獲得被模擬用戶的授權(quán)。
可以使用REVERT來還原執(zhí)行內(nèi)容前的原始身份。
?
問題四、如何獲取前端連接的信息,如IP地址和計算機名?
???????? 對于DBA工作或者某些特殊的應(yīng)用程序,需要獲取前端應(yīng)用的系統(tǒng)信息。而這些信息如果用用戶表來存儲,代價會比直接讀取數(shù)據(jù)庫系統(tǒng)信息要大。所以建議適當讀取系統(tǒng)表:
???????? 在連接數(shù)據(jù)庫的session期間,都可以在master數(shù)據(jù)庫中找到session信息,但是從05開始,有了很多DMV/DMF來實現(xiàn)這些功能:
l? Master.dbo.sysprocesses或者master.sys.sysprocesses:提供執(zhí)行階段的SPID、計算機名、應(yīng)用程序名等。
l? Sys.dm_exec_sessions:記錄每個session的基本信息,包括id、計算機名、程序名、應(yīng)用程序名等
l? Sys.dm_exec_connections:記錄每個連接到SQLServer實例的前端信息,包括網(wǎng)絡(luò)位置、連接時間等等。
l? select client_net_address 'Client IP Address' , local_net_address 'SQL ServerIP Address' ,*
l? from sys . dm_exec_connections
l? where session_id = @@spid
在2005以后,建議使用DMV取代系統(tǒng)表。
?
問題五、如何避免SQL注入的攻擊?
???????? 對于數(shù)據(jù)庫應(yīng)用程序,無論是那種DBMS,SQL注入都是一大隱患。
???????? 要避免SQL注入,應(yīng)該最起碼做到以下幾點:
1.??????檢查輸入的數(shù)據(jù),應(yīng)用程序不要相信用戶輸入的數(shù)據(jù),必須經(jīng)過檢驗后才能輸入數(shù)據(jù)庫。要排除%、--等特殊符號。
2.??????避免果度暴露錯誤信息。建議可以轉(zhuǎn)換成Windows事件或者是轉(zhuǎn)換成應(yīng)用程序內(nèi)部錯誤信息。
3.??????使用參數(shù)化查詢或者存儲過程
注意:
動態(tài)SQL是造成SQL注入的主兇
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
