我需要更新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',因为它不存在或您没有权限。
任何帮助/指示将不胜感激。谢谢。
答案 0 :(得分:12)
恢复时SQL身份验证登录和数据库用户经常发生的事情是,SIDS将不同步,或者数据库中的用户不存在登录,从而破坏了关系。必须先修复此关系,然后才能使用该登录连接到数据库,因为在SQL Server眼中,这些主体不再连接。如果登录不存在,您必须先create it才能将其与用户关联:
--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