Я створив дві нові групи 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!
(Можливо, вам доведеться оновити Провідник об’єктів між 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
- за винятком облікового запису гостей на певних системних базах даних. Ігноруйте це і залиште їх у спокої.
Я хочу лише доповнити відповідь Аарона Бертран, що регламентує цю:
Це означає, що користувач не має привілеїв підключення до бази даних (ви не можете відключити користувачів, лише входи в систему). Я не впевнений, як саме були створені ваші користувачі ...
Це може статися з Windows
принципалами лише наступним чином:
Windows
Логін існує на рівні сервера, але не відображається у відповідній базі даних, хтось вирішує grant
/ deny
дозволити цей головний Windows на рівні бази даних. У цьому випадку відповідна користувач / схема буде створена в базі даних, і рядок з цим grant
/ deny
буде записаний в sys.database_permissions
. Це не дасть жодного доступу до цієї бази даних, оскільки новостворений користувач все ще не вистачає connect
дозволу, і ви побачите його в ОЕ із червоною стрілкою.
Я думаю, я зрозумів, чому це сталося.
Сценарій:
Домен \ 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
Отже, виявляється, що не було жодного користувача, хоча екранне шоу це чітко показувало вище.
GRANT CONNECT
, як підказує моя оригінальна відповідь, слід було вирішити проблему.
Червоний X означає, що ввімкнено вхід у систему SQL Server