数据库用户上的 RED X 是什么意思?

26 sql-server ssms users

图标上带有红色 X 的数据库中的用户

我创建了两个新的 AD 组并将它们添加为数据库的用户,但它们的图标显示为红色 X

这是什么意思?

Aar*_*and 31

这并不意味着用户被禁用(您只能禁用登录),这意味着用户没有连接到数据库的权限。我不确定您的用户是如何创建的,但证明这一点的最简单方法是:

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!
Run Code Online (Sandbox Code Playgroud)

(您可能需要在GO命令之间刷新对象资源管理器,因为缓存。)

要修复它(假设您确实希望它们能够连接到数据库):

GRANT CONNECT TO [DomainName\BI360Consultants];
GRANT CONNECT TO [DomainName\BI360Users];
Run Code Online (Sandbox Code Playgroud)

当然,您需要根据您需要它们在数据库中执行的操作来应用更多权限。

可能还有其他更模糊的方法可以进入这种状态(例如,将域组添加到数据库中的角色而不实际添加用户,如MichaelK 的回答中所述)。尽管老实说,当我尝试按照 OP 所做的操作(旧方式或正确方式)时,我无法在没有用户的情况下将域组添加到角色中:

-- the old way
EXEC sys.sp_addrolemember N'db_datareader', N'[CAKE\MyGroup]';
Run Code Online (Sandbox Code Playgroud)

消息 15410,级别 11,状态 1,过程 sp_addrolemember
用户或角色“[CAKE\MyGroup]”在此数据库中不存在。

-- the right way
ALTER ROLE db_datareader ADD MEMBER [CAKE\MyGroup];
Run Code Online (Sandbox Code Playgroud)

消息 15151,级别 16,状态 1
无法添加主体“CAKE\MyGroup”,因为它不存在或您没有权限。

当然,有了这个结果,我在sysusers(已弃用;停止使用它)或sys.database_principals. 但是,如果我这样做(感谢sepupic 的回答):

GRANT SELECT ON dbo.SomeTable TO [CAKE\MyGroup];
Run Code Online (Sandbox Code Playgroud)

然后该用户确实出现在这些视图中,并且确实作为用户出现在对象资源管理器中,由于HAS_DBACCESS() = 0. 这仍然大致相同:“无法访问数据库”。因此,如果上述方法GRANT CONNECT不起作用(在我的情况下,确实去掉了红色的 x,但我没有尝试以该帐户的身份实际查询数据库),请尝试以下操作,知道它可能会失败:

CREATE USER [DOMAIN\Group] FROM LOGIN [DOMAIN\Group];
Run Code Online (Sandbox Code Playgroud)

就我而言,当我授予连接到该用户时,它阻止了我运行以下CREATE USER命令:

消息 15023,级别 16,状态 1,第 16 行
用户、组或角色“CAKE\MyGroup”已存在于当前数据库中。

这种状态将永远是真正的guest/ INFORMATION_SCHEMA/ sys-与客户账户上的某些系统数据库中的例外。忽略这一点,让他们独自一人。


sp_addrolemember主题

在此处输入图片说明

sys.sysusers主题

在此处输入图片说明


sep*_*pic 6

我只想对 Aaron Bertrand 的回答进行补充,以保护这一点:

这意味着用户没有连接到数据库的权限(您不能禁用用户,只能登录)。我不确定您的 用户是如何创建的...

Windows只能通过以下方式对主体发生:

Windowslogin 存在于服务器级别,但未映射到相关数据库,有人决定在数据库级别对此 Windows 主体grant/deny某些权限。在这种情况下,相应的用户/模式将在数据库中创建,带有此grant/ 的deny行将被写入sys.database_permissions. 这不会授予对该数据库的任何访问权限,因为新创建的用户仍然缺少connect权限,您将在 OE 中看到它带有红色箭头。