Database 使用相同的登录、访问和角色权限还原到新数据库

Database 使用相同的登录、访问和角色权限还原到新数据库,database,tsql,sql-server-2008-r2,database-backups,Database,Tsql,Sql Server 2008 R2,Database Backups,我正在使用存储过程从备份文件还原数据库。但是,在还原之后,我似乎正在丢失登录权限等。是否有方法将这些权限添加到下面的还原SQL代码中?此存储过程存在于我正在备份的数据库之外,因此我不确定如何向还原添加特定于数据库的权限 RESTORE DATABASE @new_db_name FROM DISK = @file_path WITH RECOVERY, MOVE 'OriginalFile' TO @new_db_file, MOVE 'OriginalFile_log' TO @new_d

我正在使用存储过程从备份文件还原数据库。但是,在还原之后,我似乎正在丢失登录权限等。是否有方法将这些权限添加到下面的还原SQL代码中?此存储过程存在于我正在备份的数据库之外,因此我不确定如何向还原添加特定于数据库的权限

RESTORE DATABASE @new_db_name 
FROM DISK = @file_path
WITH RECOVERY,

MOVE 'OriginalFile' TO @new_db_file,
MOVE 'OriginalFile_log' TO @new_db_log

我应该补充一点,我需要添加到目标服务器上还原的数据库中的登录名和用户在创建备份文件的原始服务器上不存在。然而,情况并非总是如此。在进一步研究之后,我发现如果目标上确实存在用户/登录名,我将需要重新同步该用户

如果登录名存在于服务器A(源)和服务器B(目标)上,则权限不应存在问题

如果目标上不存在登录名,您可以像这样添加它们:

USE [Database Name]
GO
EXEC sp_addrolemember 'Database role', 'Username'
向数据库中的用户添加角色:
在服务器级别向用户添加角色:


唯一的异常情况是服务器B上不存在用户帐户,那么您也需要通过脚本创建和添加它们。

问题是登录名是内部id。相同名称的登录名在不同的服务器上不会有相同的内部id。您需要从角色中删除该用户,然后重新添加该用户名


如果它是一个域广告组,那么你不应该删除和重新分配。这仅适用于SQL用户。

谢谢,我应该在我的问题中提到,源代码已还原到新的数据库,因此登录不存在(我猜是出于这个原因)。由于这是一个新的数据库,我不能使用[NEWDB],因为“NEWDB”名称实际上是一个动态值,会发生变化。我在还原数据库时会还原很多名称不同的数据库。我们的用户是有访问权限的广告组。我不会搞乱这些账户,因为它们存在于我们的两个数据库中。是否可以将完全限定名用作脚本/作业的一部分?例如:EXEC DBName.dbo.sp_addrolememember另外,我使用以下标记进行备份:使用NOUNLOAD、COMPRESSION、COPY_时,我只需要查看“with recovery虽然”,因为我在恢复时不使用它。