使用ALTER LOGIN更改用户自己的密码

时间:2011-06-06 09:41:48

标签: sql-server

我有一个运行以下内容的存储过程:

'ALTER LOGIN ' + @Login + ' WITH PASSWORD = ''' + @Password + ''''

我收到以下错误消息:

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

但是,如果我将用户添加到SysAdmin角色,那么它就会成功。如果我从SysAdmin中删除用户,我会再次收到错误消息,因此它似乎是用户权限。

问题是,我需要用户能够更改自己的密码,而ALTER LOGIN命令似乎不允许这样做,即使MSDN说:

  

委托人可以为自己的>登录更改密码,默认语言和默认数据库。

有人有任何想法吗?

3 个答案:

答案 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);

类似的东西您可以与其他登录设置一起使用。