用户登录和 $ 在数据库上的权限可能不正确恢复数据库后

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 168001
症状
如果 SQL Server 用户数据库的转储被重建或重新加载旧版本的 master 数据库之后恢复 (such as 热备份服务器) 的不同 SQL Server 或同一 SQL Server,用户登录和 $ 在数据库上的权限可能不正确。

此问题可能会泄漏本身在几个方面:
  • 登录到 6.x 服务器时,用户可能会收到以下错误:
    消息 4002,级别 14 状态 1,服务器 Microsoft SQL Server,0 行
    登录失败
    db-library: 登录不正确。
  • 登录到 7.0 的服务器时,用户可能会收到以下错误:
    消息 18456,级别 14,1,状态
    登录失败,用户 '' %1! ' '。
  • 试图访问该数据库内的对象,时用户可能会收到以下错误:
    消息 229,14,级别状态 1
    %s 权限拒绝了对 * s、 数据库 %.* s、 所有者 %.*s 对象 %。
  • 尝试创建登录并授予对还原的数据库的访问权限或向数据库添加用户,时可能会收到以下错误:
    Microsoft SQL-DMO (ODBC SQLState: 42000) 错误 15023: 当前数据库中已存在用户或角色 ' %s'。
  • 用户可能会具有为其他们以前没有的对象的权限。
原因
用户登录信息存储在 master 数据库 syslogins 表中。通过更改服务器,或被重建或还原 master 数据库的旧版本更改此信息,信息可能与创建用户数据库转储时不同。如果登录不存在的用户,他们将收到一条错误消息,指出登录失败时尝试登录到服务器。如果不存在用户登录,但该 SUID 值 (对于 6.x) 或 SID 值 (对于 7.0) 的主控形状中syslogins,并在用户数据库 sysusers 表不同,用户可能会有不同的权限,比预期用户数据库中。

注意如果使用的 Microsoft SQL Server 2005 syslogins 表和 sysusers 表实现为兼容性视图。这些视图是 sys.sysloginssys.sysusers。有关兼容性的视图的详细信息,请参阅 SQL Server 2005 丛书联机中的兼容性视图 (TRANSACT-SQL) 主题。
替代方法
要变通解决此问题,请执行以下任一操作:
  • 可用来添加登录、 用户,和的权限当前脚本是否除去并重新创建这些脚本中。例如使用脚本服务器之间传输的登录的请参阅下列 Microsoft 知识库文章:
    246133如何: SQL Server 的实例之间传输登录和密码
    240872如何解决权限问题,数据库 sql server 之间移动时
  • sp_change_users_login 存储过程可以用于重新关联 syslogins、 sysusers 和 sysalternates 表之间的关系。但是,过程的链接,使最佳估计值,并可能比预期更多的访问权限允许用户。 第一次运行该过程使用报表选项将生成的而改变用户的列表。以后,您应检查以确保受影响的用户有适当的权限。此外,注意 sp_change_users_login 过程不能解决权限问题源自登录和用户创建不同的顺序,在数据库上还原备份。
  • 加载用户数据库之前,主数据库的转储用户数据库转储的时间从还原到服务器。这样做可以确保在用户数据库中的所有用户信息与在母版中 syslogins 表正确都匹配。

    警告: 主数据库包含服务器范围内的信息,并影响服务器上的所有数据库。通过在恢复主数据库,可能会遇到更多的用户 id 和/或数据库都将丢失或有不正确的权限。在母版对备份的时间之后发生的任何更改都将丢失。如果您确信主数据库的备份版本包含用户数据库和所有其他数据库服务器上的准确信息,请只使用此方法。
  • 使用传输管理器 (用于 6.x) 或 (对于 7.0) 的 DTS 复制该登录。注意密码也不会使用此方法的传输。
  • 请与主要支持提供商联系。

警告:本文已自动翻译

Властивості

Ідентифікатор статті: 168001 – останній перегляд: 03/28/2006 05:14:56 – виправлення: 5.3

Microsoft SQL Server 6.0 标准版, Microsoft SQL Server 6.5 标准版, Microsoft SQL Server 7.0 标准版, Microsoft SQL Server 2000 标准版, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Express Edition, Microsoft SQL 2005 Server Workgroup

  • kbmt kbprb kbusage KB168001 KbMtzh
Зворотний зв’язок