Назад | Перейти на главную страницу

Как я могу сопоставить логин группы Windows со схемой dbo в базе данных?

У меня есть база данных, к которой я хочу ограничить доступ к 3 названным лицам. Я думал, что смогу сделать следующее:

  1. Создайте локальную группу Windows на сервере базы данных и добавьте в нее названных лиц.
  2. Создайте учетную запись Windows в SQL Server, сопоставленную с локальной группой Windows.
  3. Сопоставьте имя входа со схемой «dbo» в базе данных, чтобы пользователи могли получить доступ ко всем объектам, не уточняя их с помощью имени схемы.

Когда я пытаюсь выполнить шаг 3, я получаю следующую ошибку:

Msg 15353, Level 16, State 1, Line 1
An entity of type database cannot be owned by a role, a group, an approle, or by principals mapped to certificates or asymmetric keys.

Я пытался сделать это через IDE, sp_changedbowner sproc, и ALTER AUTHORIZATION команда, и каждый раз я получаю одну и ту же ошибку.

После поиска в MSDN и Google я обнаружил, что это ограничение является намеренным. Отлично, это полезно. Кто-нибудь может мне сказать:

  1. Почему существует это ограничение? Это кажется очень произвольным.
  2. Что еще более важно, могу ли я выполнить свое требование другим способом?

Другая информация, которая может быть уместна:

Почему это запрещено, читайте дальше SQL Server: группы Windows, схемы по умолчанию и другие свойства. Подводя итоги статьи, если можно разрешить DEFAULT_SCHEMA группе, какой должна быть схема по умолчанию для входа в систему, которая принадлежит двум отдельным группам, каждая со своим собственным значением по умолчанию? Это разница между первичными идентичностями и вторичными, и на то есть веские причины.

Если вы хотите управлять разрешениями в схеме 'dbo', просто создайте логин для локальной группы, затем пользователя в базе данных для этой группы и, наконец, предоставьте этому пользователю КОНТРОЛЬ на schema :: dbo. Это позволит трем лицам (и любому другому пользователю в локальной группе) полностью контролировать все, что есть в схеме dbo. Они смогут изменять, выбирать и обновлять любой объект в dbo.schema, но они не смогут создавать новый объект (если это явно не разрешено). Если вы хотите, чтобы у них был полный контроль над чем-либо в базе данных, а не только над существующими объектами в схеме dbo, просто добавьте пользователя локальной группы к роли db_owner.

Если вы хотите использовать схемы в качестве пространства имен и избавить своих разработчиков от явного использования двухчастного имени, то ... просто не делайте этого. Использование квалификатора имени из двух частей не причинит вреда и только добавляет преимущества.

  1. Понятия не имею, почему он существует. Интересный.

Что касается №2, мы решаем эту проблему, создавая пользовательские роли базы данных для конкретной базы данных.

Например, у меня есть 3 пользователя домена, которые являются разработчиками. Я хочу, чтобы у них был специальный доступ к базе данных. Создаем доменную группу и помещаем их в нее. Затем создайте связанную учетную запись в SQL. Для этой базы данных (Безопасность> Роли> Роли базы данных) мы создаем новый список и добавляем этот логин в список.

Ролл может давать привилегии для определенных элементов в базе данных, может добавлять разрешения от других ролей (например, db_owner) и многое другое. Это довольно гибко.

Я часто слышал, как люди жалуются на это. В основном потому, что если у них есть «сотни» объектов базы данных, это занимает слишком много времени, но довольно гибко можно быстро добавить все или отдельные объекты. Кроме того, плохое администрирование - не уделять внимания предоставляемому вами доступу.

Ограничение связано с невозможностью определить схему по умолчанию для конкретного имени входа, если оно является частью нескольких групп.

Предположим, они разрешили это.

Если domaingroup DOMAIN \ xx был добавлен как в локальную группу SERVER \ xx1 -> в sqlsecurity, сопоставленную с serverlogin 'xx1', в свою очередь, сопоставленной с db-login 'xx1' со схемой по умолчанию 'xx1' и локальной группой SERVER \ xx2 -> ... со схемой по умолчанию 'xx2'

Предположим, пользователь DOMAIN \ xx входит в систему и выдает инструкцию

CREATE table yy

Будет ли таблица создаваться в схеме xx1 или в схеме xx2? Ответ = НЕ ОПРЕДЕЛЕН

поэтому нет схемы по умолчанию для групп. однако пользователь все еще может выдать

CREATE table xx1.yy

и

CREATE table xx2.yy