我正在嘗試從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