Sql-Server

還原數據庫中主數據庫中已映射子數據庫但子數據庫中未創建使用者的使用者

  • May 15, 2018

我不知道為什麼以下數據庫會到達這一點,但情況就是這樣

在主安全中,您可以看到映射了 DAXTest 數據庫的 defcon\axadmin 使用者

但是,如果您訪問數據庫安全,則使用者 AXAdmin 不存在。

我無法編輯有關 AXadmin 使用者映射的任何資訊,因為拋出以下錯誤:

我也無法在 master 中刪除此使用者,因為當我再次創建時具有相同的映射。

如果您檢查以下 sql:

use master
go
select * from syslogins where name='DEFCON\axadmin'
go 

use daxtest
go
select * from sysusers where name='DEFCON\axadmin'
go

您可以在 master 數據庫中看到該使用者,但在 DAXTest 中不存在

我嘗試在 DAXTest 中創建

CREATE USER [defcon\axadmin] FOR LOGIN [defcon\axadmin];

使用者有另一個會話開始名稱

但如果我嘗試編輯

ALTER USER [DEFCON\axadmin] WITH LOGIN=[DEFCON\axadmin]

您無法編輯使用者,因為不存在

錯誤:

您的登錄名DEFCON\axadminsysadmin目前伺服器上。

這意味著它不能以DEFCON\axadmin使用者身份映射到任何數據庫,它已經被映射並且像dbo在任何數據庫中一樣被映射。

要查看此內容,只需模擬此登錄名並詢問該數據庫中的使用者:

use DAXTest;
execute as login = 'DEFCON\axadmin';
select user;
-- you'll see 'dbo' here
select select IS_SRVROLEMEMBER('sysadmin');
-- you'll get 1 here
revert;

聽起來您要在與進行原始備份的伺服器不同的伺服器上還原數據庫。如果是這種情況,那麼原始伺服器上數據庫中的所有安全帳戶都會有一個幽靈登錄。嘗試以下操作:

USE [DAXTEST]
EXEC sp_dropuser 'DEFCON\axadmin'
GO

USE [DAXTEST]
create user [DEFCON\axadmin] from login [DEFCON\axadmin]
GO

USE [DAXTEST]
exec sp_addrolemember 'db_owner',[DEFCON\axadmin]
GO

引用自:https://dba.stackexchange.com/questions/192432