| |
15.8 ADSI. Диалект запросов SQL при поиске в службе каталогов
Поиск в Active Directory из скриптов ADSI в VBScript, диалект запросов SQL, ограничения диалекта, создание представлений SQL Server на основе запросов SQL к Active Directory
Пример запроса на диалекте языка SQL к службе каталогов может выглядеть следующим образом:
SELECT ADsPath, cn FROM 'LDAP://OU=Sales,DC=Fabrikam,DC=COM' WHERE objectCategory='person' AND objectClass='user' AND sn = 'H*' ORDER BY sn
Расшифруем каждую часть этого запроса.
- ADsPath, cn — это список атрибутов объектов Active Directory. которые будут возвращаться запросом. В результатах запроса они будут представлены полями объекта ADODB.Recordset. Несколько имен атрибутов должны разделяться запятыми. Вместо списка атрибутов можно использовать ключевое слово ALL или звездочку (*). Эти значения определяют, что должны вернуться все атрибуты.
- 'LDAP://OU=Sales,DC=Fabrikam,DC=COM' — это отличительное имя базового объекта поиска (то есть того контейнерного объекта, начиная с которого будет производиться поиск). Этот путь обязательно должен быть заключен в одинарные кавычки.
- objectCategory='person' AND objectClass='user' AND sn = 'H*' — это поисковые фильтры, которые используются для выбора объектов при поиске. Синтаксис поисковых фильтров соответствует стандартам языка SQL. При этом атрибутам объекта Active Directory соответствуют столбцы в выражении WHERE.
- sn (после ORDER BY) — это атрибут объекта службы каталогов, по значению которого будет производиться сортировка возвращаемых результатов. Не все службы каталогов поддерживают сортировку данных. Если сортировка на сервере службы каталогов не поддерживается, необходимо использовать свойство Sort объекта ADODB.Recordset, в который возвращаются результаты.
- Active Directory поддерживает сортировку, но лишь по одному атрибуту. Список атрибутов для того, чтобы произвести сортировку вначале по одному, а потом по другому, передать в запросе нельзя. Однако можно указать порядок сортировки при помощи ключевых слов ASC и DESC (по умолчанию используется ASC).
Джойны в запросах к Active Directory не поддерживаются. Однако, если запрос производится из SQL Server, а Active Directory используется в качестве внешнего источника данных, то можно производить джойны между таблицами SQL Server и информацией, возвращаемой Active Directory.
Вообще, работа с Active Directory как с внешним источником данных на SQL Server может быть очень удобной. Вы можете, к примеру, создать представление на SQL Server на основе запроса к Active Directory и работать с ним как с обычным представлением SQL Server:
CREATE VIEW viewADContacts
AS
SELECT [Name], sn [Last Name], street [Street], l [City], st [State]
FROM OPENQUERY( ADSI,
'SELECT name, sn, street, l, st
FROM ''LDAP:// OU=Sales,DC=actived,DC=Fabrikam,DC=Com''
WHERE objectCategory=''Person'' AND
objectClass = ''contact''')
GO
SELECT * FROM viewADContacts
| |
 |
|