2011-03-15 96 views
0

您好所有我想在,而不是插入創建觸發器,它的語法如下隱藏在SQL Server中的觸發器2005

create trigger HashPassword on PasswordTBl 
instead of insert 
as 
begin 
    insert into PasswordTBl (PasswordProxy) 
    select HashBytes('MD5', '@!'+PasswordProxy) 
    from inserted; 
    insert into master.dbo.PasswordTBl1(PasswordProxy) 
    select PasswordProxy from inserted; 
end 

由於幾乎從觸發清楚,我想存儲的哈希原始表中的密碼和備份表中的明文密碼對所有用戶都是隱藏的,但問題是匿名用戶可以通過檢查觸發器知道輔助表名。

我將不勝感激,如果有人能提供給我一個方法來隱藏或加密該觸發器或任何替代方法來達到同樣的。

在此先感謝..

+0

如果您發佈的代碼,XML或數據樣本,** **請在高亮文本編輯器的線和編輯器工具欄上的「代碼示例」按鈕('{}')點擊很好的格式和語法高亮它! – 2011-03-15 08:03:58

+3

不是您的問題的答案,但_please_考慮不存儲純文本密碼。如果用戶丟失了密碼,請隨機生成一個密碼並強制他/她在第一次連接時重置。 – Mat 2011-03-15 08:10:10

+0

@Mat:這可能是更明智的選擇,的確如此! – 2011-03-15 08:11:04

回答

3

您不能隱藏觸發 - 但你可以加密它的源代碼,所以普通用戶無法看到裏面的內容:

create trigger HashPassword on PasswordTBl 
WITH ENCRYPTION 
instead of insert 
as 
begin 
    ...... 

這是一個簡單,易於保護 - 但也相當薄弱;有辦法再次解密該源代碼。它可以保持遠離偷偷摸摸的員工,但肯定不是一個意志堅定的黑客....

+0

感謝marc提供瞭如此快速的響應,現在它滿足了我的要求,而黑客角度將在稍後考慮替代方案。 – Isha 2011-03-15 08:10:06

+1

@Isha:我不同意:修正你的權限,使代碼不可見。這不會減損marc_s的回答。 – gbn 2011-03-15 08:18:49

+0

「普通用戶」應該能夠看到triger的定義! – gbn 2011-03-15 08:22:15

0

你的用戶應該能夠讀取觸發器定義,即使他們有權利INSERT/UPDATE/SELECT。如果可以的話,他們有太多的權利。

WITH ENCRYPTION僅混淆來自民間的代碼權利已經。

參見GRANT VIEW DEFINITIONOneTwoThree。請注意,這是由ALTER和db_owner權限隱含的。

一個問題:如果有人能看到代碼,他們很可能會看到你的備份表。即使是在主用戶需要有權利寫進去的表,因爲它是一個不同的數據庫。

如果您還沒有授予權掌握在用戶或公衆,那麼這意味着系統管理員權限。這意味着有人可以撤消WITH ENCRYPTION容易

乖乖,這是錯誤的這麼多層次。