Что означает RED X для пользователя базы данных?

16

введите описание изображения здесь

Я создал две новые группы AD и добавил их в качестве пользователей базы данных, но они отображаются с RED X. Что это значит? Благодарю.

Майкл Киркпатрик
источник

Ответы:

21

Это не означает, что пользователь отключен (вы можете отключить только вход в систему ), это означает, что у пользователя нет прав на подключение к базе данных. Я не уверен, как именно были созданы ваши пользователи, но самый простой способ продемонстрировать это:

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- за исключением гостевой учетной записи в определенных системных базах данных. Игнорируйте это и оставьте их в покое.


С по sp_addrolememberтеме :

введите описание изображения здесь

С по sys.sysusersтеме :

введите описание изображения здесь

Аарон Бертран
источник
Это исправило это для меня. Но должна быть какая-то другая основная проблема - мои пользователи создаются с помощью сценариев и имеют доступ к нескольким базам данных. Только одному пользователю в одной БД требовалось явное разрешение «ПОДКЛЮЧИТЬ».
Морваэль
5

Я хочу только добавить к ответу Аарона Бертрана следующее:

Это означает, что у пользователя нет прав подключения к базе данных (вы не можете отключить пользователей, только входы в систему). Я не уверен, как именно ваши пользователи были созданы ...

Это может произойти с Windowsпринципалами только следующим образом:

WindowsЛогин существует на уровне сервера, но не сопоставлен с рассматриваемой базой данных, кто-то решает grant/ denyнекоторые разрешения для этого участника Windows на уровне базы данных. В этом случае соответствующий пользователь / схема будет создан в базе данных, и строка с этим grant/ denyбудет записана в sys.database_permissions. Это не даст никакого доступа к этой базе данных, потому что вновь созданный пользователь по-прежнему пропускает connectразрешение, и вы увидите его в OE с красной стрелкой.

sepupic
источник
Спасибо, но мы говорим о КРАСНОМ «х», а не о стрелке.
Майкл Киркпатрик,
Это вопрос визуализации Studio, но это то же самое
sepupic
0

Я думаю, я понял, почему это произошло.

Сценарий:

Домен \ 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

КРАСНЫЙ «х» уходит: введите описание изображения здесь

Таким образом, кажется, что не было никакого пользователя, хотя показ экрана ясно показал это выше.

Вот информация от sysusers: введите описание изображения здесь

Майкл Киркпатрик
источник
Это то, о чем я говорил, но вы ошибаетесь, думая, что «пользователь НЕ сопоставлен с базой данных» после того, как вы успешно добавили группу Win в роль базы данных. В этот момент создаются соответствующий пользователь и схема.
sepupic
1
Вы, должно быть, сделали что-то кроме добавления группы домена к роли базы данных, потому что это не работает (если только вы не используете какую-то древнюю версию SQL Server). И даже в этом сценарии GRANT CONNECT, как подсказывал мой первоначальный ответ, проблема должна была быть решена.
Аарон Бертран
0

У меня такая же проблема. Я исправил это, изменив статус «Вход в систему» ​​на «Включен» в разделе «Состояние» свойства пользователя в разделе «Безопасность / Логин» базы данных моего SQL-сервера. введите описание изображения здесь

красная метка исчезла после изменения этого статуса.

Манучер Чалаби
источник
-3

Красный X означает, что логины отключены в SQL Server

Goforebroke
источник
Благодарю. Но они включены.
Майкл Киркпатрик
Пользователи не могут быть отключены.
Аарон Бертран
Существует ли учетная запись в папке «Логины» на уровне экземпляра? если он запускает команду «Создать пользователя [YourLogin] для входа в систему [YourLogin]» с соответствующей базой данных. Красный X должен исчезнуть.
Goforebroke