我试图通过存储过程

时间:2017-08-06 05:17:49

标签: sql-server sql-server-2008 stored-procedures

我正在尝试通过存储过程更改用户密码。

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

SET @usrid = 'ddladmin'
SET @newpwd = 'demo@121245'
SET @oldpass = 'demo@123'

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

EXEC sp_executesql @SQL

通过上述查询,我​​收到了错误消息:

  

无法更改登录信息' ddladmin',因为它不存在或您没有权限。

但是当我尝试通过alter脚本直接改变它时,例如

ALTER LOGIN ddladmin WITH PASSWORD ='demo@12121'

它正在运作。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

错误信息非常明确:

  

因为它不存在或您没有权限。

我试图运行你的脚本,它对我没有任何错误。

因此,假设您的服务器上存在登录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