你目前正处于脱机状态,正在等待 Internet 重新连接

BUG:在企业管理器中没有显示 DBO 用户

本文的发布号曾为 CHS305711
错误号:355065 (SHILOH_BUGS)
症状
企业管理器的"用户"文件夹中未列出用户数据库中的数据库所有者 (dbo) 用户。此外,当您查看企业管理器"登录"文件夹中的任何登录帐户的属性时,可能会出现以下错误信息:
Error 21776:[SQL-DMO] The name 'dbo' was not found in the Users collection.If the name is a qualified name, use [] to separate various parts of the name, and try again.
只有在服务器上应用了 SQL Server 2000 Service Pack 1 (SP1) 后,才会出现此问题。在 Service Pack 1 之前,dbo 用户显示空登录名。
原因
企业管理器错误地筛选掉所有没有匹配登录名的用户,而 dbo 用户没有匹配的登录名。 出现这种现象的两个可能的原因是:
  • 如果数据库是由 Microsoft Windows NT 验证的登录帐户创建的,而该登录帐户对运行 SQL Server 的计算机的访问权限是通过组成员身份(例如,BUILTIN\Administrators)继承的,那么存储在该数据库的 sysusers 系统表中的安全标识号 (SID) 在 syslogins 系统表中就没有匹配的 SID。

  • 如果数据库被恢复到 dbo 用户在 sysusers 系统表中的 SID 与 syslogins 系统表中的 SID 不匹配的计算机上。
替代方法
若要解决此问题,可以使用以下两种方法之一:
  • 如果 dbo 用户没有显示登录帐户,可将数据库所有者更改为具有显示登录帐户的用户。例如,将数据库所有者更改为系统管理员 (sa),然后执行以下代码:
    exec sp_changedbowner 'sa'
  • 如果 dbo 用户具有显示登录帐户,但该用户在 sysusers 系统表中的 SID与该登录帐户在 syslogins 系统表中的 SID 不匹配(可能是由于数据库恢复造成的),可使用 sp_change_users_login 存储过程恢复 SID 映射。
状态
Microsoft 已经证实 SQL Server 2000 Service Pack 1 (SP1) 中存在此问题。
更多信息
若要确定用户数据库中的 dbo 用户是否不匹配,请执行以下查询:
Use <User_Database>GOSELECT u.name AS "Name", ISNULL(l.name, 'dbo is unmatched') AS "Matched Login"FROM sysusers uLEFT JOIN master.dbo.syslogins l ON u.sid = l.sidWHERE u.name = 'dbo'GO

参考

有关更多信息,请单击以下文章编号,查看相应的 Microsoft 知识库文章:
218172PRB:Cannot Change SA Password in Enterprise Manager(无法在企业管理器中更改 SA 密码)
274188PRB:"Troubleshooting Orphaned Users" Topic in Books Online is Incomplete(联机图书中的"孤立用户疑难解答"主题不完整)
168001PRB:User Logon and/or Permission Errors After Restoring Dump(在恢复转储后出现用户登录名和/或权限错误)
246133INF:Transfer Logins and Passwords Between SQL Server 7.0 and SQL Server 2000(在 SQL Server 7.0 和 SQL Server 2000 之间传递登录名和密码)
298758PRB:Using the Auto_Fix Option with sp_change_users_login Can Leave Security Vulnerabilities(使用 Auto_Fix 选项及 sp_change_users_login 可能会产生安全隐患)
error dmo sqldmo sem sysusers syslogins 21776
属性

文章 ID:305711 - 上次审阅时间:11/12/2003 17:20:43 - 修订版本: 2.1

  • Microsoft SQL Server 2000 标准版
  • kbbug kbpending kbsqlserv2000bug KB305711
反馈