我正在尝试从 SQL Server 2005 迁移到 SQL Server 2008。这两个数据库实例都托管在我没有完全权限的第 3 方共享服务器上。他们正在使用混合模式身份验证。
我在设置新数据库时遇到了麻烦,就像设置旧数据库一样。具体来说,新的基于 Web 的控制面板不允许在创建新数据库时指定 dbo,然后在使用 Red Gate SQL Compare 同步架构时遇到问题,因为某些对象(未明确指定)脚本中的 dbo)是使用用户帐户的前缀而不是 dbo 创建的。
我已经仔细阅读了文档,试图找到一种方法来强制我以 dbo 身份登录“user1”到“db1”数据库。我得出的结论是脚本应该如下所示:
ALTER AUTHORIZATION ON DATABASE::db1 TO user1
在运行此脚本之前,登录名“user1”已存在,但不是数据库“db1”的用户。请注意,我必须将此脚本提交给我的托管公司的支持才能运行它。根据托管公司的说法,该语句成功执行,但是当我使用 SQL Compare 比较数据库时,用户“user1”并未像在 SQL Server 2005 下那样被物理添加到数据库中。当尝试使用脚本添加它时:
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。
最佳答案
根据我收集的信息,以下内容应该足够了。
ALTER USER [user1] WITH DEFAULT_SCHEMA=[dbo]
创建无法正常工作,因为它已经存在。
关于sql-server-2005 - 登录 SQL Server 中的数据库的 dbo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5621911/