Sql-Server

數據庫使用者上的 RED X 是什麼意思?

  • August 18, 2020

圖示上帶有紅色 X 的數據庫中的使用者

我創建了兩個新的 AD 組並將它們添加為數據庫的使用者,但它們的圖示顯示為紅色 X

這是什麼意思?

這並不意味著使用者被禁用(您只能禁用登錄),這意味著使用者沒有連接到數據庫的權限。我不確定您的使用者是如何創建的,但證明這一點的最簡單方法是:

CREATE LOGIN u1 WITH PASSWORD = 'x', CHECK_POLICY = OFF;
GO
USE tempdb;
GO
CREATE USER u1 FROM LOGIN u1;
GO
ALTER LOGIN u1 DISABLE;
GO
-- u1 has no red x even though the login has been disabled

CREATE USER u2 WITHOUT LOGIN;
GO
-- check Object Explorer, u2 has no red x

DENY CONNECT TO u2;
GO
-- check Object Explorer, u2 now has a red x!

CREATE USER u3 WITHOUT LOGIN;
GO
-- check Object Explorer, u3 has no red x

REVOKE CONNECT FROM u3;
GO
-- check Object Explorer, u3 now has a red x!

(您可能需要在GO命令之間刷新對象資源管理器,因為記憶體。)

要修復它(假設您實際上希望它們能夠連接到數據庫):

GRANT CONNECT TO [DomainName\BI360Consultants];
GRANT CONNECT TO [DomainName\BI360Users];

當然,您需要應用更多權限,具體取決於您需要它們能夠在數據庫中執行的操作。

可能有其他更晦澀的方法可以進入這種狀態(例如,在沒有實際添加使用者的情況下將域組添加到數據庫中的角色,如MichaelK 的回答中所述)。雖然老實說,當我嘗試按照舊方式或正確方式執行 OP 所做的事情時,我無法在沒有使用者在場的情況下將域組添加到角色中:

-- the old way
EXEC sys.sp_addrolemember N'db_datareader', N'[CAKE\MyGroup]';

消息 15410,級別 11,狀態 1,過程 sp_addrolemember
使用者或角色 '

$$ CAKE\MyGroup $$’ 在這個數據庫中不存在。

-- the right way
ALTER ROLE db_datareader ADD MEMBER [CAKE\MyGroup];

消息 15151,級別 16,狀態 1
無法添加主體 ‘CAKE\MyGroup’,因為它不存在或您沒有權限。

當然,有了這個結果,我在sysusers(已棄用;停止使用)或sys.database_principals. 但是,如果我這樣做(感謝sepupic 的回答):

GRANT SELECT ON dbo.SomeTable TO [CAKE\MyGroup];

然後,使用者確實出現在這些視圖中,並且確實在對象資源管理器中顯示為使用者,並帶有紅色 x,因為HAS_DBACCESS() = 0. 這仍然大致相同:“無法訪問數據庫”。因此,如果上述GRANT CONNECT方法不起作用(在我的情況下,它確實擺脫了紅色 x,但我沒有嘗試以該帳戶實際查詢數據庫),也請嘗試以下操作,知道它可能會失敗:

CREATE USER [DOMAIN\Group] FROM LOGIN [DOMAIN\Group];

就我而言,當我授予連接到該使用者時,它阻止我執行CREATE USER命令:

消息 15023,級別 16,狀態 1,第 16 行
使用者、組或角色“CAKE\MyGroup”已存在於目前數據庫中。

guest//此狀態將始終為真,INFORMATION_SCHEMAsys某些系統數據庫上的來賓帳戶除外。忽略這一點,讓他們獨自一人。


主題_sp_addrolemember

在此處輸入圖像描述

主題_sys.sysusers

在此處輸入圖像描述

我只想對 Aaron Bertrand 的回答做一個補充:

這意味著使用者沒有連接到數據庫的權限(您不能禁用使用者,只能登錄)。我不確定您的 使用者是如何創建的

Windows這只能通過以下方式發生在委託人身上:

Windows登錄存在於伺服器級別,但未映射到相關數據庫,有人決定grant/deny在數據庫級別對此 Windows 主體授予一些權限。在這種情況下,將在數據庫中創建相應的使用者/模式,並將帶有此grant/的行deny寫入sys.database_permissions. 這不會授予對該數據庫的任何訪問權限,因為新創建的使用者仍然缺少該connect權限,您將在 OE 中看到它帶有紅色箭頭。

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