Sql Server 数据库还原

Sql Server 数据库还原

我在 Sql Server 2008 中工作。问题是当我恢复数据库时,数据库用户被禁用,我可以将该特定用户与登录用户进行映射。为了进行映射,我必须从数据库中删除用户,然后映射用户。

例如:- 数据库名称:- Clv 数据库用户:- Clv 服务器日志:- Clv 此用户与 Clv 数据库 Clv 用户映射

Then i took full backup of the Clv database. Now i want to change the server of the database so i restore the backup in new server.

In new server i Create Clv login and trying to map it with the Clv database's Clv user but the error is there is already a Clv User so i delete the user of the database and then i map user again so its done on that way but i want to know that is there any other way out for this situation or there is only this wayout.

Now when i restore the database the The Clv database User no longer mapped with the Clv Login. For to doing That i have to remove Clv database user first and the Map with Clv Login.

那么还有其他解决方案吗?

答案1

是的,首先使用以下语句检查恢复的数据库上的孤立用户:

sp_change_users_login @Action='报告'

然后使用这个重新映射孤立用户。您必须用孤立用户和实际的数据库登录名进行替换

sp_change_users_login @Action='update_one',@UserNamePattern='',@LoginName=''

答案2

有一个相关问题在 Stack Overflow 上。abalogh 的回答指出了一个非常有用的Microsoft 支持链接提供有关该问题的信息并提出多种解决方案。

答案3

用户不是通过名称映射到登录名,而是通过称为 sid(安全标识符)的标识符映射到登录名。幸运的是,您可以查看这些登录名并找到不匹配的登录名。sys.database_principals 视图有一个名为 sid 的列,它映射到 sys.server_principals 中名为 sid 的列。在它们之间进行左连接以查找数据库中未映射到登录名的用户。由于您正在使用 SQL 2008,因此更改用户所关联的登录名的首选方法是“alter user [foo] with login = [bar]”

另一种方法是在目标服务器上创建具有正确 sid 的登录名,这样当您恢复数据库时,sid 就会匹配。语法是“create login [bar] with sid = 0xyour_sid_here...”。希望这对您有所帮助。

相关内容