我已使用 SSMS 将数据库恢复(完整)到新服务器。当我执行此操作时,我们收到错误,表明帐户无法登录,可能是由于 SID 错误,因为我们确认该帐户在恢复期间确实进行了转移并具有适当的权限。我们尝试通过 SSMS 的 GUI 删除并重新添加用户,并从我们的应用程序收到相同的登录错误(用户不存在)。要解决此问题,我能找到的唯一解决方案是指定使用特定 SID 创建登录名,如下面的查询所示。当我执行此命令时,SQL Server 似乎域中的“”有问题。我找不到另一种方法来指定有效的方法。我缺少语法吗?如果不接受语法“”,如何使用指定的 SID 进行 AD 服务帐户登录?
CREATE LOGIN [AD_DOMAIN\login]
WITH PASSWORD = 'password_here', SID = SID_HERE;
SELECT * FROM sys.sql_logins WHERE name = 'AD_DOMAIN\login';
GO
此时,在 AD 中创建一个全新的服务帐户会更容易,但在这里查询看看我是否遗漏了一些愚蠢的东西......
当您将数据库恢复到新服务器时,您还需要将登录迁移到目标服务器。您可以执行以下操作来正确地重新映射登录名:
选项1:最快的方法是使用微软的“转移登录”方法,这是老派的方法。使用存储过程
sp_help_revlogin
。仔细阅读并遵循本文,因为它将指导您如何转移登录名。本文还包含有关如何排除孤立用户故障的链接。选项 2:安装
dbatools
. 这是一个专为 SQL Server 数据库迁移而设计的社区 PowerShell 模块,但它提供的功能远不止于此。我建议检查一下。手动安装的说明可以在网站上找到。安装后,您可以使用该Copy-DbaLogin
命令转移所有或特定登录名。有一个名为 的参数-NewSid
可以在目标服务器上生成新的 SID — 这在将登录名复制到同一服务器时非常有用。可以Repair-DbaDbOrphanUser
重新映射并修复登录不匹配问题。 这是我的首选。选项 3:正如您所提到的,另一个选项是删除登录名并重新创建它。我不推荐这个选项。
要快速修复,请使用sp_help_revlogin。不过,我强烈建议您花时间探索所提供的全方位功能
dbatools
。从长远来看,这样做无疑会带来显着的好处,确保无缝的数据库操作和易于管理。是的。通过查询 sys.database_principals 检查登录类型 https://learn.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-database-principals-transact-sql?view=sql-服务器版本16
如果类型是“G”或“U”,您应该创建登录名
https://learn.microsoft.com/en-us/sql/t-sql/statements/create-login-transact-sql?view=sql-server-ver16
仅当类型为“S”SQL 用户时,您才应提供密码或 SID