Sha*_*mad 2 sql-server sql-server-2008-r2
大约一年前,我将一个数据库从备份移动并恢复到另一个 SQL Server 2008R2。我不知道孤儿用户的概念。据我了解,我们最终会得到不匹配的 SID 吗?所以我运行下面的查询,我看到服务器和数据库的 sid 名称对于同一登录用户是不同的。到目前为止,用户没有抱怨,但我将如何解决这个问题?是否有任何存储过程为我列出它们?或者如果我保持原样,我可能会面临什么问题。
select d.name, d.sid, s.name, s.sid
from sys.database_principals d
full join sys.server_principals s
on d.principal_id = s.principal_id
Run Code Online (Sandbox Code Playgroud)
非常感谢任何建议。
有几种可能性。
首先,如果孤立用户是 Windows 登录/组(类型 U 或 G),则没问题。
-- If the login doesn't currently exist on the server
CREATE LOGIN [Windows Account] FROM WINDOWS;
-- Fix the user
USE dbname
ALTER USER [user name] WITH LOGIN = [Windows Account];
Run Code Online (Sandbox Code Playgroud)
如果它是“SQL 登录”(S 类型)并且登录存在,那么再次没问题。
-- Fix the user
USE dbname
ALTER USER [user name] WITH LOGIN = [Windows Account];
Run Code Online (Sandbox Code Playgroud)
如果“SQL 登录”的登录名不存在,那么您必须创建登录名,这需要知道密码。
-- Create the login
CREATE LOGIN [login name] WITH PASSWORD = '<strong password>';
Run Code Online (Sandbox Code Playgroud)
不要忘记确保您的密码符合您的 Windows 策略要求。如果您仍然拥有旧服务器,则可以通过从其他服务器获取密码的哈希值,轻松地从其他服务器复制登录名,包括密码。(根据两台服务器的版本不同,可能会有一些问题)。
我在这里发表了一篇文章:http : //sqlstudies.com/2013/03/25/how-do-i-move-a-sql-login-from-one-server-to-another-without-the-密码/