sp_password 是 SQL Server 內建預存程序,用於新增/變更登入密碼,適用於無法透過 SSMS 介面修改的情況 (如 SQL 2000、特殊權限場景)。
語法與參數
sp_password
[ @old = ] 'old_password',
[ @new = ] 'new_password',
[ @loginame = ] 'login_name' ]
| 參數 | 類型 | 預設 | 說明 |
| @old | sysname | NULL | 舊密碼,變更自身密碼時必填;sysadmin 重設他人密碼可為 NULL |
| @new | sysname | 無 | 新密碼 (1-128 字元,含字母、符號、數字) |
| @loginame | sysname | NULL | 目標登入名,僅 sysadmin/securityadmin 可指定他人 |
回傳碼
實戰案例
1. 重設 sa 密碼 (無舊密碼,需 sysadmin)
EXEC sp_password NULL, 'NewStr0ngP@ssw0rd', 'sa';
2. 一般使用者變更自身密碼
EXEC sp_password 'OldP@ss', 'NewP@ss'; -- @loginame 預設為目前登入
3. sysadmin 重設他人密碼
EXEC sp_password NULL, 'ResetP@ss', 'app_user';
關鍵限制與注意事項
- 不可用於 Windows 整合驗證帳號:密碼由 AD 管理,需在 AD 修改。
- 不可在使用者交易中執行:
BEGIN TRAN...EXEC sp_password...COMMIT 會失敗。
- 密碼加密儲存:任何人 (含 sysadmin) 皆無法檢視明文密碼。
- 審計記錄特殊行為:sysadmin 用三參數重設自身密碼,審計顯示為「變更他人密碼」。
- SQL 2005+ 建議用 ALTER LOGIN:
ALTER LOGIN sa WITH PASSWORD = 'NewP@ss' UNLOCK; 功能更完整 (解鎖、強制變更、雜湊演算法升級)。
權限矩陣