2011-04-11 73 views
1

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

+0

因此[user1]是一個sql server級別的登錄名,可以在master.dbo.syslogins中看到,並且[database] .dbo.sysusers中沒有用戶具有相同的sid – AgentDBA 2011-04-11 15:34:05

+0

感謝您的幫助。是的,情況就是如此。我從哪裏出發? – NightOwl888 2011-04-11 15:57:54

+0

今天早上剛剛再次看到這一點,我設法重現了同樣的錯誤。不過,你已經說過你已經「把所有其他用戶都丟掉了......」你是否已經把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

回答

3

從我收集的以下應該就足夠了。

ALTER USER [user1] WITH DEFAULT_SCHEMA=[dbo] 

該創建工作並不存在,因爲它已經存在。

+0

這與我已有的有何不同?我的意思是,「user1」已經是dbo了,對吧?是否給出默認模式dbo在功能上等同於使用戶成爲dbo(關於創建對象)? – NightOwl888 2011-04-12 15:23:15

+0

,除非你擔心在user1模式下創建新的表/函數,這就是爲什麼你聲明你不得不明確聲明dbo。[tablename]。通過將默認模式設置爲dbo,那麼您不需要在創建語句中表達dbo – AgentDBA 2011-04-12 15:25:47

+0

好吧,我使用SQL Compare測試了這種方法,它的工作原理 - 這確實是2005服務器的原因。另外,如果數據庫以這種方式更新,它不需要支持請求來運行我沒有權限運行的任何SQL腳本。 – NightOwl888 2011-04-12 16:06:12

相關問題