Я создал две новые группы AD и добавил их в качестве пользователей базы данных, но они отображаются с RED X. Что это значит? Благодарю.
Я создал две новые группы AD и добавил их в качестве пользователей базы данных, но они отображаются с RED 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!
(Вам может понадобиться обновить Object Explorer между 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];
Затем пользователь появился в этих представлениях и появился как пользователь в обозревателе объектов с красным значком «х» HAS_DBACCESS() = 0
. Что все равно составляет примерно то же самое: «не может получить доступ к базе данных». Поэтому, если вышеприведенное GRANT CONNECT
не работает (в моем случае это избавилось от красного x, но я не пытался на самом деле запросить базу данных как эту учетную запись), также попробуйте следующее, зная, что это может произойти сбой:
CREATE USER [DOMAIN\Group] FROM LOGIN [DOMAIN\Group];
В моем случае, когда я предоставил соединение этому пользователю, он не позволил мне выполнить CREATE USER
команду:
Сообщение 15023, уровень 16, состояние 1, строка 16
Пользователь, группа или роль «CAKE \ MyGroup» уже существует в текущей базе данных.
Это состояние всегда будет верно для guest
/ INFORMATION_SCHEMA
/ sys
- за исключением гостевой учетной записи в определенных системных базах данных. Игнорируйте это и оставьте их в покое.
Я хочу только добавить к ответу Аарона Бертрана следующее:
Это означает, что у пользователя нет прав подключения к базе данных (вы не можете отключить пользователей, только входы в систему). Я не уверен, как именно ваши пользователи были созданы ...
Это может произойти с Windows
принципалами только следующим образом:
Windows
Логин существует на уровне сервера, но не сопоставлен с рассматриваемой базой данных, кто-то решает grant
/ deny
некоторые разрешения для этого участника Windows на уровне базы данных. В этом случае соответствующий пользователь / схема будет создан в базе данных, и строка с этим grant
/ deny
будет записана в sys.database_permissions
. Это не даст никакого доступа к этой базе данных, потому что вновь созданный пользователь по-прежнему пропускает connect
разрешение, и вы увидите его в OE с красной стрелкой.
Я думаю, я понял, почему это произошло.
Сценарий:
Домен \ BI360Users является группой AD
Домен \ BI360Users добавлен в качестве логина для сервера (он имеет разрешения на подключение)
Домен \ BI360Users НЕ существует как пользователь базы данных
Я делаю следующее:
USE TEMPDB
GO
EXEC sp_addrolemember N'db_datareader', N'Doamin\BI360users'
GO
Успешно завершается.
Обновить: появляется КРАСНЫЙ «х».
Пользователь НЕ сопоставлен с базой данных:
Если я сейчас создаю пользователя:
USE TempDB
GO
CREATE USER [Domain\BI360Users] FOR LOGIN [DOMAIN\BI360Users]
GO
Таким образом, кажется, что не было никакого пользователя, хотя показ экрана ясно показал это выше.
GRANT CONNECT
, как подсказывал мой первоначальный ответ, проблема должна была быть решена.
Красный X означает, что логины отключены в SQL Server