登录到SQL Server中的数据库的dbo

时间:2011-04-11 13:17:55

标签: sql-server-2005 sql-server-2008 shared-hosting

我正在尝试从SQL Server 2005迁移到SQL Server 2008.这两个数据库实例都托管在我没有完全权限的第三方共享服务器上。他们正在使用混合模式身份验证。

我遇到了设置新数据库的问题,就像设置旧数据库一样。具体来说,新的基于Web的控制面板不允许在创建新数据库时指定dbo,然后在使用Red Gate SQL Compare同步模式时遇到问题因为某些对象(未明确指定)正在使用用户帐户的前缀而不是dbo创建脚本中的dbo。

我已经倾覆了文档,试图找到一种方法强制我的登录“user1”作为dbo到“db1”数据库。我得出结论,脚本应该是这样的:

ALTER AUTHORIZATION ON DATABASE::db1 TO user1

在运行此脚本之前,登录名“user1”已存在,但不是数据库“db1”的用户。注意我必须将此脚本提交给我的托管公司的支持才能运行它。根据托管公司的说法,语句成功执行,但是当我使用SQL比较数据库时,用户“user1”没有像SQL Server 2005那样物理地添加到数据库中。当尝试使用脚本添加它时:< / p>

CREATE USER [user1] FOR LOGIN [user1] WITH DEFAULT_SCHEMA=[dbo]

我收到错误消息:

"The login already has an account under a different username"

我已经尝试从数据库中删除所有其他用户,但错误消息仍然存在 - 我觉得很奇怪。

虽然我可以通过显式指定dbo来修复脚本,但这不可避免地是一个等待关闭的定时炸弹,因为如果引入任何没有明确指定dbo的新脚本,则会在同步期间出现故障。由于某些脚本来自第三方,因此这不是一个好的解决方案。

所以我的问题:是否有另一个声明我需要运行才能将“user1”作为dbo用户添加到数据库中? SQL Server 2005和SQL Server 2008 R2之间的实现中是否有任何可能导致这些不一致的内容发生了变化?

我很遗憾无法测试找到第二个答案,因为我没有其他SQL Server 2008数据库可供测试,而且我没有完全访问权限来执行此操作。

旧数据库是通过控制面板创建的,该控制面板强制指定dbo,新的数据库不允许在创建数据库时指定dbo。

1 个答案:

答案 0 :(得分:3)

从我收集的内容中,以下内容应该足够了。

ALTER USER [user1] WITH DEFAULT_SCHEMA=[dbo]

创作不存在已经存在。