6.4 SQL Server 密碼原則和認證
SQL Server 2005加強了在Windows Server 2003下啟動並執行SQL Server登入的身分識別驗證。SQL Server 2005 對其他動作系統下啟動並執行SQL Server的身分識別驗證也做了一些改進。正如本章一開始提到的,使用者可以使用Windows身分識別驗證或者SQL Server身分識別驗證來登入SQL Server。Windows身分識別驗證是非常安全的,因為使用者的密碼不會在網上發送,而且域和機器的管理員可以加強密碼原則。密碼原則可能要求使用者在第一次登入NT域或機器時更改他們的密碼。策略可能要求使用者使用強壯的密碼,比如,至少八個字元,包括至少一個數字、字母和特殊符號。密碼原則可能也要求使用者經常改變他們的密碼。這個策略可以指定在嘗試了若干次錯誤密碼後禁止登入。當一個資料庫管理員僅使用Windows登入時,SQL Server繼承這個層級的可增強安全性。SQL Server 2005之前,SQL Server沒有這些必要的安全性特徵。在大多數安全性系統中,弱的密碼被認為是安全性最薄弱的環節。
有了SQL Server 2005新的安全特性之後,SQL Server 登入帳號將具有所有可用的安全性策略特徵。SQL Server使用者和應用程式角色都將使用這個策略。在Windows Server 2003或以後的版本中,這個策略將通過作業系統級調用來實現。這個作業系統級調用是NetValidatePasswordPolicy。這樣一來,管理員就可以在Windows整合和SQL Server登入中使用相同的策略。為了讓使用SQL Server 2005的公司有時間來分析政策如何影響已有的應用程式,這些策略在每一個登入帳號已被關掉。顯然,這種做法不值得推薦。預設情況下,CHECK_EXPIRATION策略會被設定成OFF,因為組織和軟體廠家將不得不對每一個應用程式增加更改密碼的能力。Windows向使用者提供在登入時(或者當登入到Windows以後)更改密碼的能力時,SQL Server使用者能夠在登入時改變密碼。用戶端應用程式介面(比如OLE DB,ODBC和ADO.NET)以及用戶端工具(比如SQL Server Management Studio)都已被增強以支援這個特點。
如果你正在使用Active Directory,密碼原則將通過Active Directory Users and Computers工具設定;如果你正在管理一個非域的電腦,密碼原則將通過Local Security Settings管理工具設定。表6.1給出了使用Local Security Settings的設定。
表6.1 Windows和SQL Server 2005登入帳號的安全性策略
策略類別 |
策略名稱 |
預設設定(本機伺服器) |
密碼原則 |
強密碼曆史 |
0密碼記憶 |
最長密碼使用時間 |
42天 |
最短密碼使用時間 |
0天 |
最短密碼長度 |
0字元 |
密碼必須匹配複雜性需求 |
|
用可遞加密方法儲存密碼 |
禁用 |
賬戶鎖定策略 |
帳號鎖定期限 |
禁用 |
賬戶鎖定閾值 |
0非法登入嘗試 |
在此後重設鎖定計數器 |
不適用的 |
注意,Account Lockout Duration(當達到Account Lockout Threshold(賬戶鎖定極限)時,賬戶被鎖定的時間)和Reset Lockout Counter After(當無效的登入嘗試返回到0(如果沒有擴充它)以後的時間)都是不適用的,直到設定Account Lockout Threshold為某個非0的值。
對於SQL Server登入賬戶,這裡有兩個密碼選項:CHECK_EXPIRATION和CHECK_POLICY。CHECK_EXPIRATION包含最小和最大的密碼期限,而CHECK_POLICY包含所有其他的策略。當使用者的運行和任何政策運行時,SQL Server登入賬戶必須由資料庫管理員解鎖,正如本章後面有一個例子所示。
管理員可以通過SQL Server Management Studio或通過使用T_SQL語句CREATE LOGIN來增加一個新的登入帳號。為了向後相容,傳統的預存程序sp_addlogin仍被支援,但這個預存程序沒有展現出新的特徵。像下面的例子一樣,你可以建立一個新的SQL Server登入帳號,它要求在使用者第一次試圖登入時使用MUST_CHANGE關鍵字更改密碼。如果不改變密碼就試圖訪問SQL Server執行個體,將導致一個錯誤:
CREATE LOGIN FRED WITH PASSWORD = 'hy!at54Cq' MUST_CHANGE,
DEFAULT_DATABASE = pubs,
CHECK_EXPIRATION = ON,
CHECK_POLICY = ON
GO
FRED試圖登入到資料庫時,他將得到一個“初次登入時必須更改密碼”的錯誤。資料庫管理員用DDL可以管理密碼原則問題。如果登入帳號FRED被鎖定,比如在三次登入嘗試失敗之後,資料庫管理員可以通過下面的代碼解鎖登入帳號:
ALTER LOGIN FRED WITH PASSWORD = 'fredsNewpassword#' UNLOCK
GO
在極少數情況下,資料庫管理員希望關掉強制密碼有效期間限或強制安全性策略時,可以用ALTER LOGIN來實現。設定了MUST_CHANGE標誌但使用者尚未更改密碼時,下面的兩個語句都不能工作:
ALTER LOGIN FRED WITH CHECK_EXPIRATION = OFF
GO
ALTER LOGIN FRED WITH CHECK_POLICY = OFF
GO