我需要在数据库恢复后立即允许用户访问数据库。 我试过这个:
Use [master]
go
restore database DBTest
from disk='E:\userTemp\DBTest1.bak'
WITH MOVE 'DBTest' TO 'E:\SQLData\DBTest1.mdf',
MOVE 'DBTest_log' TO 'F:\SQLData\DBTest1.ldf',
replace, recovery, stats=5, maxtransfersize=1048576
Print '---------------------------RESTORE COMPLETED ---------------------------'
-- Create the user.
CREATE USER [user_indi] FOR LOGIN [user_indi]
GO
USE [DBTest]
GO
EXEC sp_addrolemember N'db_owner', N'user_indi'
GO
当我这样做时,我收到以下错误:
Msg 15023,Level 16,State 1,Line 22
用户,组或角色'user_indi'已存在于当前数据库中 Msg 15410,Level 11,State 1,Procedure sp_addrolemember,Line 75
此数据库中不存在用户或角色“user_indi”。
所以,添加命令以删除中间的用户。现在看起来像这样。
Use [master]
go
restore database DBTest
from disk='E:\userTemp\DBTest1.bak'
WITH MOVE 'DBTest' TO 'E:\SQLData\DBTest1.mdf',
MOVE 'DBTest_log' TO 'F:\SQLData\DBTest1.ldf',
replace, recovery, stats=5, maxtransfersize=1048576
Print '---------------------------RESTORE COMPLETED ---------------------------'
-- Remove the user
USE [DBTest]
GO
DROP USER [user_indi]
GO
-- Create the user.
CREATE USER [user_indi] FOR LOGIN [user_indi]
GO
USE [DBTest]
GO
EXEC sp_addrolemember N'db_owner', N'user_indi'
GO
现在,我收到错误:
Msg 15151,Level 16,State 1,Line 2
无法删除用户'user_indi',因为它不存在或您没有权限。
我不能允许错误,因为我需要安排此恢复和权限作业。为什么我会收到此错误以及如何解决此问题?
RM
答案 0 :(得分:0)
您的USE [DBTest]
声明分布在两个不同的地方。
在第一个中,您尝试在MASTER中创建用户。在第二个中,您将在DBTest中创建它。