我有一个运行以下内容的存储过程:
'ALTER LOGIN ' + @Login + ' WITH PASSWORD = ''' + @Password + ''''
我收到以下错误消息:
无法更改登录'aUser',因为它不存在或您没有权限。
但是,如果我将用户添加到SysAdmin角色,那么它就会成功。如果我从SysAdmin中删除用户,我会再次收到错误消息,因此它似乎是用户权限。
问题是,我需要用户能够更改自己的密码,而ALTER LOGIN命令似乎不允许这样做,即使MSDN说:
委托人可以为自己的>登录更改密码,默认语言和默认数据库。
有人有任何想法吗?
答案 0 :(得分:46)
我认为要为没有ALTER ANY LOGIN
的用户执行普通密码更改,您还必须提供OLD_PASSWORD
参数。这将匹配较旧的sp_password
存储过程中的示例:
以下示例显示如何使用ALTER LOGIN将登录Victoria的密码从B3r1000d#2-36更改为V1cteAmanti55imE。这是首选方法。用户Victoria无需其他权限即可执行此命令。其他用户需要ALTER ANY LOGIN权限:
ALTER LOGIN Victoria WITH
PASSWORD = 'V1cteAmanti55imE'
OLD_PASSWORD = 'B3r1000d#2-36';
GO
答案 1 :(得分:2)
您可以让您的应用程序以具有足够权限的用户身份运行。为此,您将在SQL Server中为应用程序创建服务帐户,然后以该用户身份运行应用程序。
但是,为您的应用程序创建一个Users表并在那里管理这些数据可能会更好,而不是允许您的用户直接访问更改登录。
答案 2 :(得分:1)
我正在使用以下脚本(您可以创建为 proc)
声明@l sysname = suser_sname(); 声明@x nvarchar(max) = 'alter login [' + @l + '] with default_database = Northwind'; 执行 (@x);
类似的东西您可以与其他登录设置一起使用。