Що означає 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!

(Можливо, вам доведеться оновити Провідник об’єктів між GOкомандами, оскільки, ну, кешування.)

Щоб виправити це (припускаючи, що ви дійсно хочете, щоб вони могли підключитися до бази даних):

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

Звичайно, вам потрібно буде застосувати більше дозволів залежно від того, що вам потрібно, щоб вони могли робити в базі даних.

Можуть бути й інші, більш незрозумілі способи потрапити в цей стан (наприклад, додавання доменної групи до ролі в базі даних без фактичного додавання користувача, як описано у відповіді MichaelK ). Хоча я буду чесною, коли я намагався робити те, що зробив ОП, старим або правильним способом, я не зміг додати групу домену до ролі без присутності користувача:

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

Msg 15410, рівень 11, стан 1, процедура sp_addrolemember
Користувач або роль "[CAKE \ MyGroup]" в цій базі даних не існує.

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

Msg 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_SCHEMA/ sys- за винятком облікового запису гостей на певних системних базах даних. Ігноруйте це і залиште їх у спокої.


З по sp_addrolememberтемі :

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

З по sys.sysusersтемі :

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


Це зафіксувало це для мене. Але має бути якась інша основна проблема - мої користувачі створюються за допомогою скриптів і мають доступ до декількох баз даних. Лише одному користувачеві в одній БД потрібен явний дозвіл "ЗВ'ЯЗКУВАТИ", щоб надати дозвіл.
Морваль

5

Я хочу лише доповнити відповідь Аарона Бертран, що регламентує цю:

Це означає, що користувач не має привілеїв підключення до бази даних (ви не можете відключити користувачів, лише входи в систему). Я не впевнений, як саме були створені ваші користувачі ...

Це може статися з Windowsпринципалами лише наступним чином:

WindowsЛогін існує на рівні сервера, але не відображається у відповідній базі даних, хтось вирішує grant/ denyдозволити цей головний Windows на рівні бази даних. У цьому випадку відповідна користувач / схема буде створена в базі даних, і рядок з цим grant/ denyбуде записаний в sys.database_permissions. Це не дасть жодного доступу до цієї бази даних, оскільки новостворений користувач все ще не вистачає connectдозволу, і ви побачите його в ОЕ із червоною стрілкою.


Дякую, але ми говоримо про ЧЕРВОНУ "х", а не стрілку.
Майкл Кіркпатрік

Це питання візуалізації студії, але те саме
сепупік

0

Я думаю, я зрозумів, чому це сталося.

Сценарій:

Домен \ BI360 Користувачі - це група AD

Домен \ BI360Корифікатори додається як вхід на сервер (він має дозволи на підключення)

Домен \ BI360користувачі НЕ існує як користувач бази даних

Я роблю наступне:

USE TEMPDB
GO
EXEC sp_addrolemember N'db_datareader', N'Doamin\BI360users'
GO

Завершує успішно.

Оновити: З'являється червоний 'x'.

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

Користувач НЕ відображається в базі даних: введіть тут опис зображення

Якщо я зараз створю користувача:

USE TempDB
GO
CREATE USER [Domain\BI360Users] FOR LOGIN [DOMAIN\BI360Users]
GO

ЧЕРВЕНА "х" минає: введіть тут опис зображення

Отже, виявляється, що не було жодного користувача, хоча екранне шоу це чітко показувало вище.

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


Про це я говорив, але ви помиляєтесь, думаючи, що "Користувач НЕ відображається в базі даних" після того, як ви успішно додали команду Win до ролі бази даних. У цей же момент відповідали користувачеві і створені схеми.
сепупік

1
Ви, мабуть, зробили щось інше, ніж додавання доменної групи до ролі бази даних, оскільки це не працює (якщо ви не знаходитесь у старовинній версії SQL Server). І навіть у цьому сценарії GRANT CONNECT, як підказує моя оригінальна відповідь, слід було вирішити проблему.
Аарон Бертран

0

У мене була така ж проблема. Я виправив це, змінивши статус "Увійти" на "Увімкнено" у розділі "Статус" власності користувача у розділі "Безпека / Вхід" моєї бази даних SQL-сервера введіть тут опис зображення

після зміни цього статусу червона позначка зникла.


-3

Червоний X означає, що ввімкнено вхід у систему SQL Server


Дякую. Але вони включені.
Майкл Кіркпатрік

Користувачів не можна відключити.
Аарон Бертран

Чи існує обліковий запис у папці входу на рівні екземпляра? якщо він запускає команду "Створити користувача [YourLogin] для входу [YourLogin]" без відповідної бази даних. Червоний Х повинен зникнути.
Goforebroke
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.