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