我正在尝试从SQL Server 2005迁移到SQL Server 2008.这两个数据库实例都托管在没有完全权限的第三方共享服务器上。他们正在使用混合模式认证。在SQL Server中为数据库登录到dbo
我遇到了麻烦,设置新的数据库的方式与旧的设置相同。具体来说,新的基于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下。当尝试使用脚本添加它:
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。
因此[user1]是一个sql server级别的登录名,可以在master.dbo.syslogins中看到,并且[database] .dbo.sysusers中没有用户具有相同的sid – AgentDBA 2011-04-11 15:34:05
感谢您的帮助。是的,情况就是如此。我从哪里出发? – NightOwl888 2011-04-11 15:57:54
今天早上刚刚再次看到这一点,我设法重现了同样的错误。不过,你已经说过你已经“把所有其他用户都丢掉了......”你是否已经把user1放在数据库上并重新创建了它?请尝试以下代码以查看登录名和用户之间的所有映射:“将l.name作为ServerLoginName,将u.name作为DatabaseUserName从[数据库] .dbo.sysusers中选择u在主服务器上加入master.dbo.syslogins l对u.sid = l.sid “ – AgentDBA 2011-04-12 07:43:21