在SQL Server中,權限的分配很重要。特別是在用戶數(shù)量眾多的數(shù)據(jù)庫里面,用戶權限,架構的劃分經(jīng)常會導致權限之間的沖突,導致無法登陸,下面就是一例。
用系統(tǒng)\administrators可以登錄,在安全性用戶列表中,修改"sa"屬性時系統(tǒng)提示: 屬性IsLocked不可用于登錄"[sa]。該對像可能沒有此屬性,也可能是訪問權限不足而無法檢索。(Microsoft。SqlServer。Smo),但新建一個dba用戶可以登陸,不過要去掉強制實施密碼策略,強制密碼過期選擇才行。 sa 也不能刪除也不能修改屬性。 感覺sa就被鎖住了一樣,查看了一下系統(tǒng)字典表syslogins(select * from syslogins)也沒有發(fā)現(xiàn)什么不同。 最后在SQL Server 2005聯(lián)機叢書查看幫助,有了一些啟發(fā)。
在 Windows Server 2003或更高版本環(huán)境下運行SQL Server 2005時,可以使用Windows密碼策略機制,特別是目前各地市在做安檢和系統(tǒng)策略加固,最容易發(fā)生此故障。
SQL Server 2005 可以將Windows Server 2003中使用的復雜性策略和過期策略應用于SQL Server內(nèi)部使用的密碼。這項功能需要通過NetValidatePasswordPolicy() API實現(xiàn),該API只在Windows Server 2003和更高版本中提供。
密碼復雜性
密碼復雜性策略通過增加可能密碼的數(shù)量來阻止強力攻擊。實施密碼復雜性策略時,新密碼必須符合以下原則。
密碼不得包含全部或“部分”用戶帳戶名。部分帳戶名是指三個或三個以上兩端用“空白”(空格、制表符、回車符等)或任何以下字符分隔的連續(xù)字母數(shù)字字符: - _ #
密碼長度至少為六個字符。
密碼包含以下四類字符中的三類:
?英文大寫字母 (A - Z)
?英文小寫字母 (a - z)
?十個基本數(shù)字 (0 - 9)
?非字母數(shù)字(例如:!、$、# 或 %)
密碼過期
密碼過期策略用于管理密碼的使用期限。如果選中了密碼過期策略,則系統(tǒng)將提醒用戶更改舊密碼和帳戶,并禁用過期的密碼。
策略實施
密碼策略是針對各個登錄名實施的。使用 ALTER LOGIN 可以配置策略應用程序。配置密碼策略實施時,適用以下規(guī)則。
當 CHECK_POLICY 更改為 ON 時:
?除非將 CHECK_EXPIRATION 顯式設置為 OFF,否則也會將其設置為 ON。
?密碼歷史使用當前的密碼哈希值初始化。
當 CHECK_POLICY 更改為 OFF 時:
?CHECK_EXPIRATION 也設置為 OFF。
?清除密碼歷史。
?lockout_time 的值被重置。
如果指定 MUST_CHANGE,則 CHECK_EXPIRATION 和 CHECK_POLICY 必須設置為 ON。否則,該語句將失敗。
如果 CHECK_POLICY 設置為 OFF,則 CHECK_EXPIRATION 不能設置為 ON。包含此選項組合的 ALTER LOGIN 語句將失敗。
最后在查詢分析器執(zhí)行以下語句就可以了。
alter login sa with password = 'newpwd' unlock, check_policy = off, check_expiration = off
完成后,重新啟動SQL SERVER服務,即可正常使用sa賬戶了。