truncate在對大表全刪除操作時,會明顯比delete語句更快更有效,但是因為它不需要存放日誌,並且一定是全表刪除,所以造成資料的不可恢復性。也說明了它的危險性。
但是,執行truncate需要有表擁有者、系統管理員、db_owner、db_ddladmin這些裡面的其中一種高許可權角色才能執行。
對此,可以使用05之後的execute as表示式來實現許可權內容的切換:
1.切換登入:execute as login
2.切換使用者:execute as user
3.切換執行許可權:execute as owner/』user name』,利用高使用者許可權來執行作業。此步驟可以在低許可權實體下執行高許可權操作,也能避免安全性漏洞。
另外,只有execute as caller可以跨資料庫執行,而其他方式進行的許可權切換僅限制於本資料庫。
注意:執行execute as user模擬使用者切換時,需要先獲得被模擬使用者的授權。
可以使用revert來還原執行內容前的原始身份。
對於dba工作或者某些特殊的應用程式,需要獲取前端應用的系統資訊。而這些資訊如果用使用者表來儲存,代價會比直接讀取資料庫系統資訊要大。所以建議適當讀取系統表:
在連線資料庫的session期間,都可以在master資料庫中找到session資訊,但是從05開始,有了很多dmv/dmf來實現這些功能:
l master.dbo.sysprocesses或者master.sys.sysprocesses:提供執行階段的spid、計算機名、應用程式名等。
l sys.dm_exec_sessions:記錄每個session的基本資訊,包括id、計算機名、程式名、應用程式名等
l sys.dm_exec_connections:記錄每個連線到sqlserver例項的前端資訊,包括網路位置、連線時間等等。
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取代系統表。
對於資料庫應用程式,無論是那種dbms,sql注入都是一大隱患。
要避免sql注入,應該最起碼做到以下幾點:
1.檢查輸入的資料,應用程式不要相信使用者輸入的資料,必須經過檢驗後才能輸入資料庫。要排除%、--等特殊符號。
2.避免果度暴露錯誤資訊。建議可以轉換成windows事件或者是轉換成應用程式內部錯誤資訊。
3.使用引數化查詢或者儲存過程
T SQL問題解決集錦 資料加解密(2)
原文 t sql問題解決集錦 資料加解密 2 truncate在對大表全刪除操作時,會明顯比delete語句更快更有效,但是因為它不需要存放日誌,並且一定是全表刪除,所以造成資料的不可恢復性。也說明了它的危險性。但是,執行truncate需要有表擁有者 系統管理員 db owner db ddlad...
Oracle加解密 解決編碼問題 解決中文截斷問題
oracle中使用des進行加密,如果oracle編碼utf 8時,會出現編碼錯誤。要進行轉碼。網上查詢的 都會出現 中文截斷的現象,比如 加密這個1 會把 1 漏了加密,這是因為使用了length 函式的原因,使用lengthb 則不會出現問題。優化空位元組處理和解密空白字元處理 編碼方法如下 c...
軟體執行問題解決集錦
軟體執行問題之一 提示部件 comdlg32.ocx 或其附件之一不能正確使用 乙個檔案丟失或無效。或 component comdlg32.ocx or one of its dependencies not correctly registered a file is missing or in...