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 могу писаться в двух форматах:
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 строк с данными. Данное ограничение можно обойти настроив соответствующим образом контроллер доменов.
Далее я приведу примеры запросов, которые я использую: