5

我需要更新 SQL Server 2012 中数据库安全文件夹中一位用户的密码。不幸的是,我们内部没有 DBA,因此需要一些帮助。有人告诉我,我在此 SQL Server 上拥有系统管理员权限,但我找不到在数据库中更新用户密码的位置。当我用谷歌搜索时,msdn 向我展示了如何更新 SQL Server 2012 框中的登录名,但该用户未列在此服务器的 Security\Logins 文件夹下,但该用户仅在 database\Security\Users 文件夹下。

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

消息 15151,第 16 层,状态 1,第 2 行

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

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

4

1 回答 1

14

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

  • 登录 - 允许实体连接到 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';

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

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
于 2013-11-05T19:46:16.033 回答