2017-08-06 88 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