2012-03-27 85 views
0

我目前正在使用SQL Server 2005,並嘗試從幾個月前恢復數據庫,但當我嘗試創建帳戶時恢復它時,它告訴我該帳戶已存在但您無法看到它在安全之下。我嘗試刪除該帳戶,但它告訴我該帳戶不存在可以放棄...但是當我嘗試創建它時,它告訴我它存在......它令我瘋狂。我完全從服務器和所有鏈接的服務器和所有數據庫中刪除該帳戶,並且我試圖再次重新創建它,它可以在所有數據庫上運行,除了它始終存在的一個數據庫。任何想法可能是什麼或我應該檢查什麼?SQL Server帳戶問題

回答

1

作爲一名DBA,我總是遇到這個問題。而GUI並沒有什麼幫助。你的SQL服務器有你想要的賬號,db有你想要的賬號,但是它們在恢復時不會自動連接。

解決這個問題的真正方法是停止使用個人賬戶。僅基於作爲活動目錄組的成員提供對數據庫的訪問權限。然後,您可以將訪問問題提供給AD組。順便說一句:雖然個人帳戶不會在還原時自動重新連接,但羣組訪問可以。

下面是我用來解決相同問題的一些代碼。

create procedure [dbo].[proc_FarSyncLogins] @TargetDB nvarchar(128)= '' as 
begin 
    SET NOCOUNT ON 

    declare @cmd varchar(1000) 

    begin try 
     drop table master.dbo.NeededUsers 
    end try 
    begin catch 
     print 'could not: drop table master.dbo.NeededUsers' 
    end catch 

    set @cmd='select name collate Latin1_General_CI_AS as name,is_disabled 
       into master.dbo.NeededUsers 
       from ['[email protected]+'].sys.sql_logins' 

    --print @cmd 
    exec(@cmd) 

    print 'logins that need to be enabled' 
    select * from master.dbo.NeededUsers 

    declare @UserName nvarchar(128) 
    declare SyncUsers1 cursor fast_forward for SELECT Name FROM master.dbo.NeededUsers 

    OPEN SyncUsers1 
    FETCH NEXT FROM SyncUsers1 INTO @UserName 
    WHILE @@FETCH_STATUS = 0 
     BEGIN 
      set @cmd = '' 
      if @TargetDB <> '' 
      begin 
       set @[email protected]+'Use ['[email protected]+']; '+char(10) 
      end 
      begin try 
       SET @cmd = @cmd+'ALTER LOGIN ['[email protected]+'] ENABLE; '+char(10) 
       SET @cmd = @cmd+'exec sp_change_users_login @Action=''Auto_Fix'', @UserNamePattern ='''[email protected]+'''; '+char(10) 
       PRINT @cmd 
       EXEC(@cmd) 
      end try 
      begin catch 
       Print 'Failed :'[email protected] 
      end catch 

      FETCH NEXT FROM SyncUsers1 INTO @UserName 
     END 
    CLOSE SyncUsers1 
    DEALLOCATE SyncUsers1 
end 

然後,只需

exec master.dbo.proc_FarSyncLogins '<yourDBName>'; 

它是確定地哈克,你將要仔細閱讀輸出來驗證你的意思做的所有這些行動。但大多數時候你只想恢復你以前的一切。

1

該帳戶存在於數據庫和服務器級別。

因此,您需要從數據庫本身刪除帳戶,但不能從服務器中刪除該帳戶,因爲它不存在該帳戶。 你有沒有試過...

use {yourdatabasename} 
go 
EXEC sp_dropuser '{username}' 
+0

嘿感謝您的快速回復。是的,我試過了,它不工作...仍然給我一個錯誤,用戶不存在刪除。 – 2012-03-27 14:09:42

+0

你看到它在這裏... select * from sys.sysusers – 2012-03-27 14:22:34

+0

,你可以在這裏看看它的主... select * from sys.syslogins – 2012-03-27 14:24:35

2

你在數據庫中有孤立的用戶帳戶。將數據庫從一臺服務器複製/移動到另一臺服務器時,這是非常常見的問題。您需要將它們從數據庫用戶中刪除或者更好的選擇是創建服務器登錄並將該登錄映射到該孤立數據庫用戶。 雖然回來我用my blog寫了一些演示腳本,但你可能想看看它。或者只需查看this MSDN link即可使用可用於管理孤立用戶的SP。