使用相同的登录,访问和角色权限恢复到新数据库

时间:2014-08-26 17:36:23

标签: database tsql sql-server-2008-r2 database-backups

我正在使用SPROC从备份文件恢复数据库。然而,在恢复之后,我似乎失去了登录权限等。有没有办法将这些权限添加到下面的恢复SQL代码中?这个sproc存在于我备份的数据库之外,所以我不确定如何为恢复添加数据库特定权限。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

如果目标上没有登录,您可以添加如下:

USE [Database Name]
GO
EXEC sp_addrolemember 'Database role', 'Username'

在数据库中为用户添加角色:sp_addRoleMember
在服务器级别向用户添加角色:sp_addsrvrolemember

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

答案 1 :(得分:0)

问题是登录是一个内部ID。同名的登录名在不同的服务器上不具有相同的内部ID。您需要从角色中删除用户,然后再添加该用户名。

如果是域AD组,那么您不必删除并重新分配。这仅适用于SQL用户。