数据库用户和服务器登录名以及它们之间的映射


9

我在家中有一个SQL Server 2008 R2 Express Edition实例,在客户端的服务器上有一个实例,我正在使用该实例来开发使用Access作为前端的应用程序。该应用程序有5个独立的登录名,我可以在连接字符串中使用(基于用户所在的访问组)。家庭实例具有多个数据库-其中一些与该应用程序无关

随着时间的推移,我已经在每个实例中手动创建了登录名(可能以不同的顺序)。

我希望能够(不止一次)从正在使用的数据库的家用计算机中进行备份,并使用还原将其加载到客户端的实例上,只需将备份集中的文件移动到实际位置即可。还原过程中在此服务器上使用的文件。我不理解的是数据库用户和登录名之间的映射。

我以为名称的对应关系就足够了,但是在尝试解决还原数据库的用户似乎未映射到服务器登录名的问题时,我遇到了Transact-SQL ALTER USER语句,尤其是有关使用WITH LOGIN的参考以及有关“ SID”的一些讨论。

由于(我假设)服务器登录名在每个实例中都有不同的SID,是否表示在实例之间加载备份后,我必须使用一系列ALTER USER WITH LOGIN命令再次重新连接映射?

Answers:


9

Logins或服务器登录名存在于SQL服务器级别,而登录名则存在于database user数据库级别。它们不必具有相同的名称,但通常是相同的。在一个实例中,如果没有相应的SQL Server登录名,您将无法正常使用数据库用户功能。

假设您有一个实例:您计算机上具有登录用户A的实例instanceA。您可以将此服务器登录userA映射到数据库用户:数据库DB_A的userA。它们都被命名为userA,但是一个是服务器,一个是服务器。数据库用户userA驻留在DB_A中。当您从实例A备份DB_A并将其还原到另一个实例B时数据库用户userA被移动,但是服务器登录名userA仍然保留在instanceA上。要将登录从instanceA移到instanceB,可以使用logindatabase usersp_help_revlogin(单击以检出KB页面)

如果您以前在instanceB上创建了SQL Server登录用户 A,则当DB_A从instanceA还原到instanceB时,SQL将尝试将此登录与数据库用户userA映射。如果失败,则可以使用sp_change_users_login(单击BOL链接)过程来修复损坏的映射。希望这可以清除一切。


谢谢-我相信我的概念正确,但是sp_help_revlogin和sp_change_users_login以及new和我会帮助我。我会探索更多。谢谢
akc42
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.