sql-server-2005 - 登录 SQL Server 中的数据库的 dbo

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

我正在尝试从 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/

相关文章:

sql-server-2005 - 通过用户定义的函数输出进行 Nhibernate 过滤

tsql - 'inserted' 和 'deleted' 表是否保证在 AFTER UPDATE 触发器中以相同的顺序返回它们的记录?

sql - 这个问题有基于集合的解决方案吗?

mysql - 当 MS SQL 2005 express 已经存在时,在 Windows Server 2003 上安装 mySQL 是否安全?

sql-server-2005 - 艰难的 T-SQL 左连接?

SQL Server,如何获取多个不同的项目

sql - 处理 200000 多条记录时查询非常非常慢

shared-hosting - Laravel 5.8,工匠命令错误 : Failed to parse dotenv file due to an invalid name

php - 除了使用 system() 函数进行备份之外,还需要一种运行 mysqldump 的方法

amazon-web-services - Route53 将名称服务器指向 Bluehost 不工作