Как назначить полный доступ безопасности группы Active Directory в SQL Server 2008?

40

Я хотел бы использовать встроенную защиту с моим внутренним приложением, которое находится в домене. К сожалению, я никогда не мог заставить это работать хорошо. Я хотел бы назначить всей группе Exchange (Active Directory) роль в SQL Server для доступа на чтение / запись к определенным таблицам. Таким образом, мне не нужно было бы создавать оператора, когда кого-то нанимали, или удалять оператора, когда кого-то увольняли. Это возможно? Какие шаги я бы предпринял, чтобы сделать это?

Майкл Хедгпет
источник

Ответы:

48
  • Установите группу AD в качестве логина. И «логин» означает логин на уровне сервера, а не концепцию AD пользователя / логина. В SQL Server говорят, что это принципал уровня сервера
  • Создайте подключенного пользователя. Вы не должны разрешать пользователя непосредственно для таблиц. И «пользователь» означает пользователя базы данных, а не концепцию AD пользователя: в SQL Server это «принципал уровня базы данных»
  • Добавить пользователя в роль (также «участник уровня базы данных»)
  • Разрешения GRANT для ролей в таблицах (таблица или процедура и т. Д. Являются «защищаемыми»)

Пример сценария

USE master;
GO
CREATE LOGIN [MYDOMAIN\APPLICATION SUPPORT] FROM WINDOWS;
GO
USE mydb;
GO
CREATE USER [MYDOMAIN\APPLICATION SUPPORT] FROM LOGIN [MYDOMAIN\APPLICATION SUPPORT];
GO
CREATE ROLE rSupport;
GO
EXEC sp_addrolemember 'rSupport', 'MYDOMAIN\APPLICATION SUPPORT';
GO
GRANT SELECT, INSERT,UPDATE, etc ON Mytable TO rSupport;
GO

sp_addrolememberустарел, начиная с SQL Server 2012, где ALTER ROLEследует использовать вместо.

ГБН
источник
3
Было бы полезно объяснить, почему вы должны назначать разрешения ролям, а не пользователям SQL (в данном случае группам AD).
Дрю Чапин
Возможно, вы имеете в виду «создать пользователя [...] для входа в систему [...]» вместо «из входа в систему»?
Агостино,
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ ... ДЛЯ ЛОГИНА ...; И СОЗДАЙТЕ ПОЛЬЗОВАТЕЛЯ ... ИЗ ЛОГИНА ...; у меня оба работают (MSSQL2016). Не уверен, есть ли разница?
Обратный инженер
Нет, оба действительны docs.microsoft.com/en-us/sql/t-sql/statements/…
gbn
4

Предоставление разрешений в пределах SQL Server группе AD является относительно простым. Это можно сделать либо через T-SQL, либо через Management Studio.

Например, если у вас вызвана группа AD MYDOMAIN\APPLICATION SUPPORT, вы должны создать имя входа на уровне сервера, а затем использовать сопоставления с отдельными базами данных, чтобы предоставить немного более детальные разрешения, такие как средство чтения данных.

В идеале доступ ко всем приложениям должен осуществляться через хранимые процедуры *, поэтому требуются только разрешения на выполнение этих хранимых процедур в этой базе данных.

* С точки зрения безопасности, чтобы позволить конкретному пользователю видеть некоторые данные конкретные, вы можете создать процедуру и предоставить пользователю выполнить разрешение на эту процедуру, и ничего другого. Разрешение пользователю делать запросы напрямую означало бы предоставление разрешения на выборку для всех задействованных таблиц. Также проще работать с процедурами и легче отлаживать.

Хранимые процедуры абстрагируют доступ к таблице и ограничивают доступ. Для типов DBA это как «позвольте мне увидеть все переменные вашего экземпляра: я не хочу использовать методы, методы получения или установки».

Питер Шофилд
источник
3

От marc_s, отвечающего «Как добавить группу пользователей Active Directory в качестве входа в SQL Server» :

В SQL Server Management Studio перейдите Object Explorer > (your server) > Security > Loginsи щелкните правой кнопкой мыши New Login:

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

Затем в появившемся диалоговом окне выберите типы объектов, которые вы хотите видеть ( Groupsпо умолчанию отключено - отметьте это!) И выберите место, где вы хотите искать свои объекты (например, используйте Entire Directory), а затем найдите свою группу AD. ,

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

Теперь у вас есть обычная учетная запись SQL Server - точно так же, как при создании учетной записи для одного пользователя AD. Дайте этому новому логину права доступа к нужным базам данных - и все!

Любой член этой группы AD теперь может войти в SQL Server и использовать вашу базу данных.

Даже Миен
источник
2
Ссылка на этот SO-ответ, вероятно, полезна, но вы не добавляете ничего нового в пост, не так ли? Вы могли бы просто опубликовать ссылку в качестве комментария.
Андрей М
2
В ответе есть хороший скриншот для проверки групп в разделе «Тип объекта», так как это то, чего мне не хватало, когда я пытался это сделать. По моему мнению, ссылка не показывает это таким полезным способом. Просто пытаюсь помочь следующему человеку ...
Даже Mien
Что вы имеете в виду? Обычно есть ссылка, по которой можно перейти, и все, кто перейдет по ссылке, увидят красивый скриншот, о котором вы говорите, а также все остальное, что вы опубликовали здесь. Впрочем, не буду спорить, просто сообщу, что мое мнение не изменилось: ссылка (в комментарии) тоже подойдет.
Андрей М
4
Мое мнение тоже не изменилось. Ссылка в комментарии не передает ту же информацию, что и реальное изображение на веб-странице. «Покажи, не говори».
Даже Миен
1

Если пользователь является членом группы DOMAIN \ SecurityGroup с полномочиями Sysadmin в SQL, он будет использоваться при доступе к базам данных. В противном случае вам нужно посмотреть, какие домены \ SecurityGroup предоставили полномочия в каждой базе данных. Если пользователь является членом 2 групп безопасности, причем SecGroupA имеет полномочия выбора, а SecGroupB - полномочия вставки, пользователь может выбирать и вставлять.

Пиюш Агравал
источник