首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2008

SQL Server 2008/2005 修改登入屬性時出現「MUST_CHANGE 為 ON 時無法關閉 CHECK_POLICY」錯誤的解決方法

     編輯:SQL Server 2008

在 SQL Server 2005/2008 中,當登入帳號建立時勾選了「強制執行密碼原則」與「使用者必須在下次登入時變更密碼」(MUST_CHANGE = ON),後續若嘗試取消勾選「強制執行密碼原則」(CHECK_POLICY = OFF),會報錯 錯誤 15128:
當 MUST_CHANGE 為 ON (開) 時,不能將 CHECK_POLICY 和 CHECK_EXPIRATION 選項設為 OFF (關)。

錯誤原因

MUST_CHANGE = ON 表示該登入下次登入必須變更密碼。此狀態下,密碼原則檢查 (CHECK_POLICY) 與到期檢查 (CHECK_EXPIRATION) 必須保持啟用,否則無法保證新密碼符合原則。因此直接在屬性視窗取消勾選會被阻擋。

解決方法:先透過 T-SQL 變更密碼,重置 MUST_CHANGE 狀態

使用 ALTER LOGIN 陳述式指定新密碼,執行後 MUST_CHANGE 會自動變為 OFF,即可在屬性視窗自由調整原則選項。

步驟

  1. 以 sa 或具備 ALTER ANY LOGIN 權限的帳號開啟新查詢視窗。
  2. 執行以下 T-SQL (將 登入名 與 新密碼 替換為實際值):
ALTER LOGIN [登入名] WITH PASSWORD = N'新密碼';
  1. 執行成功後,重新開啟該登入的「屬性」視窗,「強制執行密碼原則」與「強制執行密碼到期」核取方塊即可正常取消勾選。

為什麼不能直接讓使用者自己登入改密碼?

SQL Server 登入不像 Windows 帳號支援「登入時強制變更密碼」的互動式提示。若 MUST_CHANGE = ON,使用者嘗試登入時會收到錯誤 18488: 登入失敗,密碼必須變更,但無法在同一連線中完成變更,導致無法登入進而修改密碼,形成死結。

替代簡單做法:刪除重建登入

若該登入無關聯資料庫使用者/權限/物件擁有權,最快方式是:

  1. 在 SSMS 中右鍵登入名稱 → 刪除。
  2. 重新建立登入,依需求設定密碼原則選項。
注意:刪除登入會移除其對應的資料庫使用者與權限,請確認影響範圍後再執行。

完整 T-SQL 範例 (含檢查狀態)

-- 1. 查看目前登入狀態
SELECT name, is_policy_checked, is_expiration_checked, password_hash IS NOT NULL AS has_password
FROM sys.sql_logins
WHERE name = N'登入名';

-- 2. 變更密碼 (自動將 MUST_CHANGE 設為 OFF)
ALTER LOGIN [登入名] WITH PASSWORD = N'NewStr0ng!P@ss';

-- 3. 再次查看狀態確認
SELECT name, is_policy_checked, is_expiration_checked
FROM sys.sql_logins
WHERE name = N'登入名';

總結

  • 遇到錯誤 15128 時,先用 ALTER LOGIN 重設密碼,即可解除 CHECK_POLICY/CHECK_EXPIRATION 的鎖定。
  • 或直接刪除重建登入 (視業務影響評估)。
  • 建立登入時若不需強制變更密碼,請取消勾選「使用者必須在下次登入時變更密碼」。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved