2008-10-07 50 views
1

我已將一份數據庫的副本帶回家,以便我可以進行一些測試。但是,當我嘗試運行存儲過程時,我無法打開用戶默認數據庫。登錄失敗..無法打開用戶默認數據庫。登錄失敗。 SQL 2005

我已檢查並檢查和檢查我可以在數據庫登錄到sql管理工作室打開表和訪問默認以及其他數據庫的任何想法?

可能是一個腐敗的用戶是從SQL 2000的工作,2005年在國內

回答

1

我將8個數據庫從SQL Server 2000遷移到SQL Server 2005並遷移到了一臺完全不同的計算機上。我通常想知道存儲過程正在做什麼,所以我挖了一點點,發現實際的命令是ALTER USER

這就是其他人一直在說的。當你在SQL Server 2005中分離並重新連接數據庫時,用戶會失去聯繫。我發現這種行爲最令人討厭,因爲我沒有在SQL Server 2000中看到這種行爲。

解決此問題的T-SQL看起來像這樣:

USE AdventureWorks; 
ALTER USER Mary5 WITH NAME = Mary51; 
GO 

這MSDN文章談一點關於這一點:只有

http://msdn.microsoft.com/en-us/library/ms176060.aspx

3

編輯:我的是從2005年到2005年。不知道這是否會爲你的情況下工作...

我有類似的問題。對我來說,當我分離或創建一個備份,然後重新創建數據庫時,它將失去與用戶的連接。我一直在使用的用戶仍然在登錄下,但它將無法登錄。

在我的情況下,我能夠通過刪除用戶在數據庫 - >安全 - >用戶,而不是用戶這在根sql服務器用戶列表中。

然後轉到根用戶列表並重新分配數據庫映射或創建用戶(如果不存在)。

希望這會有所幫助。

+0

好的答案將適用於2000> 2005以及。 – Turnkey 2008-10-07 01:08:11

+0

甚至2000 - > 2000,所有用戶都會在master數據庫中獲得與其關聯的ID,您可能會看到一個用戶連接到數據庫,但是如果用戶在主數據庫中沒有匹配的ID,則該帳戶將失敗登錄。從數據庫中刪除用戶,然後從服務器安全工作重新附加。 – Adam 2008-10-07 01:34:39

0

我的理解是,登錄存儲在服務器中,而用戶是登錄數據庫的一種分配(如果我錯了,請糾正我)。

因此,您不能通過分離/附加數據庫來移動登錄,解決方案是創建數據庫用戶將(有效)登錄連接到複製的數據庫。

+0

你能再細說一下嗎?我並不完全聽從最後一句話。我認爲你的解決方案可能會節省額外的步驟,我不得不重新映射用戶。謝謝! – 2008-10-07 01:13:11

2

這是在黑暗中拍攝的,所以請原諒我,如果這只是浪費你的時間。

另一張海報提到,給定的用戶有一個系統ID和任何給定數據庫的ID。這可以通過比較master.sys.syslogins和dbname.sys.users之間的sid來驗證相同的登錄名/用戶名。如果您從另一臺擁有主數據庫副本的SQL Server中恢復備份,則sids將不匹配。

Sql Server 2005不允許直接編輯系統表而不用很痛苦。爲了幫助了這些錯誤匹配,他們增加了一個存儲過程來幫助你解決這些問題:

USE數據庫名 GO

的sp_change_users_login @行動=「報告」

,會告訴你什麼樣的用戶有一個dbName.sys.users條目,但不包含master.sys.syslogins一個 - 或者兩者都存在名稱,但sid不同。

如果它顯示你的用戶是不同步的,程序也有一個模式,以改變鏈接:

USE數據庫名 GO 的sp_change_users_login 'Update_One', 'userNameInDbUsers', 'UserNameInLogins'

如果sid不匹配不是你的問題,我也看到了Sql Server 2005的真正棘手的東西。gui尤其是越野車。要解決這樣的問題,我不得不實際下降的syslogins項(通過GUI或DROP LOGIN命令)

的sp_change_users_login:http://msdn.microsoft.com/en-us/library/ms174378(SQL.90).aspx

刪除登錄語法:http://msdn.microsoft.com/en-us/library/ms188012(SQL.90).aspx

0

正如前,提到登錄映射到該用戶帳戶可能在移動過程中被解除關聯。或者,您移動它時未創建預期的憑據,在這種情況下,您需要首先創建登錄名...

如果它是備份集並且您正在恢復它,但是,沒有(我知道)通過管理界面重新關聯登錄到用戶。相反,你必須使用:

exec sp_change_users_login update_one, 'user', 'login' 

讓它恢復鏈接。

0

ALTER LOGIN工程於2005年的SQL。

要更改用戶默認的數據庫在2000年使用

EXEC master.dbo.sp_defaultdb @loginname = N'BuiltIn\Administrators', @defdb = N'master' 

我發現這個硬盤的方式,當我設置的內置\管理員帳戶默認應用程序數據庫和它在某種程度上已脫機和我無法再登錄。使用Management Studio,您可以將選項設置爲登錄到主服務器,但您必須在任何其他操作都能正常工作之前運行上述命令,而獲得默認數據庫不可用錯誤的次數就會減少。

1

我只是解決了這個問題。我的默認數據庫是AdventureWorks2008,所以作爲管理員,我最終從服務器上刪除了我的登錄名。然後運行以下重建我的用戶

CREATE LOGIN [NT\mylogin] FROM WINDOWS WITH DEFAULT_DATABASE=[Master], DEFAULT_LANGUAGE=[us_english] 
GO 
2

我有同樣的問題,我有固定它:

C:\> sqlcmd -E -d master 
1> ALTER LOGIN ***** WITH DEFAULT_DATABASE=master 
2> GO 

哪裏*****是您的用戶名。

(如果你使用的是域用戶名:[*****]

編輯:

*****可能是:

  • username如果用戶是本地
  • [username]如果用戶屬於實際域名
  • [domain\username]如果用戶屬於另一個域(未測試)
相關問題