我在家里有一个 SQL Server 2008 R2 Express Edition 实例,在客户端的服务器上有另一个实例,我用它来开发使用 Access 作为前端的应用程序。这个应用程序有 5 个单独的登录名,我可以在连接字符串中使用它们(基于用户所在的访问组)。home 实例有几个数据库——其中一些与这个应用程序无关
随着时间的推移,我已经在每个实例中手动创建了登录名(并且可能以不同的顺序)。
我希望能够(不止一次)从我正在处理的数据库的家用机器上进行备份,并使用恢复将其加载到客户端的实例上,只需将备份集中的文件移动到实际还原过程中此服务器上使用的文件。我不明白的部分是数据库用户和登录名之间的映射。
我原以为名称的对应关系应该足够了,但是在尝试解决还原数据库的用户似乎没有映射到服务器登录名的问题时,我遇到了 Transact-SQL ALTER USER 语句,特别是它对使用 WITH LOGIN 的引用以及有关“SID”的一些讨论。
由于(我假设)服务器登录名称在每个实例中都有不同的 SID,这是否意味着在我加载实例之间的备份后,我必须使用一系列 ALTER USER WITH LOGIN 命令重新连接映射?
Logins或服务器登录存在于 SQL 服务器级别,而 存在于database user数据库级别。它们不必具有相同的名称,但通常具有相同的名称。在一个实例中,如果没有相应的 SQL 服务器登录名,您将无法正常使用数据库用户。
假设您有一个实例:instanceA,在您的计算机上有一个服务器登录userA。您可以将此服务器登录用户 userA映射到数据库用户:数据库DB_A 的userA。它们都被命名为userA,但一个是服务器,一个是. 数据库用户:userA驻留在DB_A 中。当您将 DB_A 从instanceA备份和恢复到另一个instanceB 时,数据库用户:userA已移动,但服务器登录名:userA仍保留在 instanceA 上。要将登录名从 instanceA 移动到 instanceB,您可以使用logindatabase usersp_help_revlogin(点击查看知识库页面)。
如果您之前在 instanceB上创建了SQL 服务器登录 userA,那么当 DB_A 从 instanceA 恢复到 instanceB 时,SQL 将尝试将此登录名映射到数据库用户:userA。如果此操作失败,您可以使用sp_change_users_login(单击获取 BOL 链接)过程修复损坏的映射。希望这能解决问题。
| 归档时间: |
|
| 查看次数: |
9267 次 |
| 最近记录: |