Запросы к Active Directory

SQL Server позволяет производить выборки данных из множества источников данных при помощи многочисленных доступных драйверов. В том числе MS SQL Server позволяет выполнять запросы к контроллеру домена. В моем случае к Active Directory. Это очень полезная функция, которая может быть использована для множества задач. Я в основном использую ее для динамической настройки прав доступа к отчетным системам. По хорошему, настройка прав должна производиться с использованием групп пользователей домена. В таком случае, при добавлении нового пользователя в группу домена, для него автоматически будут применены соответствующие права. Но не все системы позволяют настроить роли с учетом групп пользователей контроллера домена. Например, я столкнулся с такой проблемой в MS SQL Server SSAS Multidimensional. Чтобы решить данную проблему, необходимо получить список пользователей необходимой группы контроллера домена и автоматически добавить каждого пользователя в нужную нам роль.

Настройка Linked Server

Параметр Значение
Provider
OLE DB provider for Microsoft Directory Services 
Product Name  ADSI
Data Source afsdatasource
Security Be made using the login's current security context

Настройка связного сервера к MS AD не представляет из себя ничего трудного. Достаточно указать следующие свойства:

Запросы к AD

Запросы к AD могу писаться в двух форматах:
  • SQL
  • LDAP
SQL-формат:
SELECT * FROM OPENQUERY(AD,
'SELECT name, ADsPath, title  
FROM ''LDAP://DC=domain_name'' 
WHERE objectCategory = ''User''' 
) 
LDAP-формат:
SELECT * FROM OPENQUERY(AD,'<LDAP://DC=domain_name>;(&(objectcategory=user));name, ADsPath, title ')
Но существует ограничение на получение данных из AD -- 900 строк с данными. Данное ограничение можно обойти настроив соответствующим образом контроллер доменов.
Далее я приведу примеры запросов, которые я использую: