如何在SQL Server 2012中更新数据库用户密码

5
我需要在SQL Server 2012的数据库安全文件夹中更新一个用户的密码。不幸的是,我们没有公司内部的DBA,因此需要一些帮助。我被告知我在这个SQL Server上有sysadmin权限,但是我找不到在数据库中更新用户密码的地方。当我搜索时,MSDN向我展示了如何在SQL Server 2012中更新登录名,但是该用户在此服务器的Security\Logins文件夹下未列出,该用户仅位于database\Security\Users文件夹下。
我尝试使用ALTER LOGIN username WITH PASSWORD = 'password';命令,但只得到以下错误:

Msg 15151, Level 16, State 1, Line 2

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

任何帮助和指导将不胜感激。谢谢。
1个回答

14
这是loginsusers之间的区别以及它们之间的关系:
  • Logins - 实例级别的主体,允许实体连接到SQL Server实例。它们本质上不授予对实例上数据库的任何访问权限。唯一的例外是具有sysadmin权限的登录可以使用数据库,因为他们是sysadmin,但是因为拥有sysadmin级别的权限。
  • Users - 数据库级别的主体,允许实体连接到SQL Server数据库。用户通过SIDs与登录相关联,创建了两者之间的关系,并允许登录连接到实例,然后使用相关联的用户连接到数据库。

在还原过程中,SQL身份验证登录和数据库用户常见的问题是SIDS不同步或数据库中缺少用户的登录,从而破坏了它们之间的关系。在使用该登录连接到数据库之前,必须修复这种关系,因为在SQL Server的眼中,这些主体不再连接。如果登录不存在,则必须首先创建它以将其与用户关联:

--Windows login (Active Directory pass through)
CREATE LOGIN [DOMAIN\foo] FROM WINDOWS;

--SQL Authenticated 
CREATE LOGIN [foo] WITH PASSWORD='5+r0ngP@55w0rd';

一旦登录存在,将其与用户关联:

ALTER USER [foo] WITH LOGIN=[foo]

您可以在数据库上下文中使用以下查询来检查孤儿记录:
select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name

1
Mike,感谢您抽出时间回复并给予详细的解释。问候。 - Melinda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接