2017-08-06 54 views
-1

我試圖通過存儲過程更改用戶密碼。我想通過存儲過程更改用戶密碼

DECLARE @newpwd VARCHAR(20) 
DECLARE @usrid VARCHAR(50) 
DECLARE @SQL NVARCHAR(4000) 
DECLARE @oldpass VARCHAR(50) 

SET @usrid = 'ddladmin' 
SET @newpwd = '[email protected]' 
SET @oldpass = '[email protected]' 

SET @SQL = 'ALTER LOGIN ' + @usrid + ' WITH PASSWORD = ' + QUOTENAME(@newpwd, '''') + ' OLD_PASSWORD = ' + QUOTENAME(@oldpass, ''''); 

EXEC sp_executesql @SQL 

有了上面的查詢,我得到一個錯誤:

Cannot alter the login 'ddladmin', because it does not exist or you do not have permission.

但是,當我嘗試直接通過alter腳本,例如改變它

ALTER LOGIN ddladmin WITH PASSWORD ='[email protected]' 

它正在工作。任何人都可以幫忙嗎?

+0

什麼是通過一個過程改變它的原因?隨着時間的推移自動改變密碼?你的數據庫連接應該經常改變嗎?誰授權改變密碼? –

+0

其實我們正試圖自動化增加安全..我們計劃安排這項工作.. –

+0

等等......什麼?安排工作。這是一個應用程序用戶嗎?你如何執行行業標準密碼?通常密碼應該涉及一些更改過程。 –

回答

0

的錯誤信息是很清楚的:

because it does not exist or you do not have permission.

我試圖運行腳本,它沒有任何錯誤爲我工作。

因此,假設您的服務器上存在登錄ddladmin,這意味着您無權更改登錄。你應該檢查你正在運行查詢的用戶,並最終change the execution context

SELECT USER_NAME(), SUSER_NAME() 
EXEC sp_executesql @SQL  
EXECUTE AS LOGIN ='SA'  
SELECT USER_NAME(), SUSER_NAME()  
EXEC sp_executesql @SQL  
REVERT