SQL Server 2008 中的登录用户映射问题
Posted
技术标签:
【中文标题】SQL Server 2008 中的登录用户映射问题【英文标题】:Login User Mapping issue in SQL Server 2008 【发布时间】:2009-08-27 18:03:10 【问题描述】:不久前,我在 Windows XP 中的 SQL Server 2008 下建立了一个名为 myDB 的数据库,然后在服务器下的 Logins 下,我单击了我的计算机登录名 COMP23/Andrew 上的属性,并使用 dbowner 作为其权限将 myDB 数据库映射到该数据库.
然后我克隆了这个 XP 安装作为备份,安装了 Visa,意识到我不想要 Vista,我将原来的 XP 副本重新映像到同一台机器上。但是数据库映射真的很混乱!基本上在服务器登录 COMP23\Andrew 下,它说它映射到 myDB,但是当我单击 myDB 并查看它的用户时,它不存在。我认为它丢失了 SID 映射,因为它认为它是一台新机器。
在服务器登录 COMP23\Andrew 下,我无法取消到 myDB 的映射,因为当我执行此操作时显示“无法删除用户 dbo”。我也无法更改 dbo 用户 - 它不会让我这样做。但是我也不能让用户出现在 myDB 用户下!这意味着我无法通过我的网站设置 (asp.net web.config) 文件登录!当我登录时,它只是说无法打开登录请求的数据库“myDB”。登录失败。 用户“COMP23\ASPNET”登录失败
有什么想法吗?我怎样才能正确地重新映射呢?我什至尝试过重新安装 SQL Server 2008,但计算机名称仍然映射到数据库。
【问题讨论】:
【参考方案1】:因为dbo是数据库的所有者,所以必须通过改变数据库的所有者来改变它的映射:
ALTER AUTHORIZATION ON database::[<yourdb>] TO [sa];
【讨论】:
这个解决方案对我有用。谢谢莱姆斯!我遇到了这种情况: domain\oldusr 在我们公司不再工作了。 domain\oldusr 映射为多个 DB 的“dbo”(参见用户映射下)。当我尝试使用“任务”>“复制数据库”向导将数据库从一台机器复制到另一台机器时,这会导致问题。我收到此错误:找不到主体 'domain\oldusr',因为它不存在或您没有权限。运行上述查询会从该数据库中删除用户映射(作为 dbo)。所以最后我可以使用任务>复制数据库复制数据库。【参考方案2】:首先,存储过程名称不能有引号。其次,不是autofix,而是auto_fix。
最后,一旦进行了这些更正,您会收到以下错误消息:
消息 15600,级别 15,状态 1,过程 sp_change_users_login,行 181 为过程指定了无效的参数或选项 'sys.sp_change_users_login'。
当你运行这个命令时:
EXEC sp_change_users_login @Action = 'auto_fix', @LoginName = '<your username>'
【讨论】:
【参考方案3】:既然您提到了 SID 映射问题,您是否尝试过使用sp_change_users_login
?使用自动修复选项将您的登录重新映射到数据库中的登录。
对于上面的示例,您应该在连接到数据库时执行以下操作
EXEC `sp_change_users_login` @Action = 'autofix', @LoginName = 'COMP23\ASPNET'
【讨论】:
【参考方案4】:USE [Database]
GO
ALTER USER [dbo] WITH NAME=[username]
GO
sp_changedbowner 'sa'
GO
【讨论】:
虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。以上是关于SQL Server 2008 中的登录用户映射问题的主要内容,如果未能解决你的问题,请参考以下文章
SQL SERVER 2008 服务器登录名角色,数据库用户角色架构知识点总结
ASP.NET 和 SQL Server 2008 中的错误“用户 'NT AUTHORITY\IUSR' 登录失败”
SQL SERVER 2008只能用windows用户登录,不能用SQL SERVER 用户验证登录,很是头疼,希望高手给指点指点