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

Mel*_*nda 3 sql-server-2012

我需要更新SQL Server 2012中数据库安全性文件夹中某个用户的密码.不幸的是,我们内部没有DBA,因此需要一些帮助.我被告知我在这个SQL Server上有sysadmin权限,但我找不到WHERE来更新数据库中的用户密码.当我用Google搜索时,msdn告诉我如何在SQL Server 2012框中更新登录,但此用户未列在此服务器的Security\Logins文件夹下,但此用户仅在数据库\ Security\Users文件夹下.

我曾尝试过该ALTER LOGIN username WITH PASSWORD = 'password';命令,但我只得到了这个错误:

Msg 15151,Level 16,State 1,Line 2

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

任何帮助/方向将不胜感激.谢谢.

Mik*_*Fal 12

这是登录用户之间的区别以及它们之间的关系:

  • 登录 - 允许实体连接到SQL Server实例的实例级主体.它们本质上不授予对实例上的数据库的任何访问权限.一个例外是具有sysadmin权限的登录可以使用数据库,因为它们是sysadmin,但是由于sysadmin级别权限.
  • 用户 - 允许实体连接到SQL Server数据库的数据库级主体.用户通过SID与登录相关联,在两者之间创建关系并允许登录连接到实例,然后使用关联的用户连接到数据库.

在还原时,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';
Run Code Online (Sandbox Code Playgroud)

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

ALTER USER [foo] WITH LOGIN=[foo]
Run Code Online (Sandbox Code Playgroud)

您可以在数据库的上下文中使用以下查询来检查孤立:

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
Run Code Online (Sandbox Code Playgroud)