Вопрос по active-directory, sql, sql-server-2005 – Запрос Active Directory из SQL Server 2005

7

Как я могу запросить Active Directory из SQL Server 2005?

Ваш Ответ

4   ответа
3

чтобы удалить ссылку используйте

exec sp_dropserver 'ADSI';
Спасибо за упоминание этого! Calanus
10

Вам нужен связанный сервер, создающий на SQL Server, который указывает на ADSI (интерфейс службы Active Directory), что-то вроде этого сделает это.

EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 'ADSDSOObject', 'adsdatasource'

Тогда вы можете использовать следующий вид запроса.


SELECT *
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName
FROM ''LDAP://DC=MyDC,DC=com,DC=uk''
WHERE objectCategory = ''Person''
AND objectClass = ''user'')

Вы'Вам нужно будет правильно установить строку LDAP: // (узнать подробности у администратора AD) и помнить, что распределенные специальные запросы, использующие OpenQuery, по умолчанию отключены в SQL Server. Если у вас есть все вышеперечисленное, то вам будет довольно легко найти Google для любых конкретных вариантов.

Ссылка на AD доступна только для чтения, или вы можете вставить через этот маршрут тоже? Kristen
Нет этоs Выберите только, но вы можете использовать объектную модель ADSI COM для создания пользователей. Там'вступление здесьen.csharp-online.net/User_Management_with_Active_Directory Steve Homer
5

Связанный сервер:

EXEC master.dbo.sp_addlinkedserver
    @server = N'ADSI', 
    @srvproduct=N'Active Directory Services',
    @provider=N'ADsDSOObject', 
    @datasrc=N'Servername.domain.com'

Запрос:

select * from openquery
(
ADSI,'SELECT name 
FROM ''LDAP://Servername.domain.com''
WHERE objectCategory = ''Person'' AND objectClass = ''user''
')

Есть много примеров, если вы ищете связанный сервер и LDPA в Google. Я говорю это потому, что с LDAP может быть довольно сложно работать.

3

возвращаемых за один раз из запросов Active Directory, вы можете использовать функцию, которую я написал ниже.

CREATE FUNCTION [dbo].[tf_GetAllUsersFromActiveDirectory]
()
RETURNS 
     @USERS TABLE 
        (   
              sAMAccountName    VARCHAR(25)             PRIMARY KEY CLUSTERED     
            , givenName VARCHAR(200)
            , SN VARCHAR(200)
            , userAccountControl VARBINARY(8)
            , mail VARCHAR(200)
        )
AS
BEGIN

INSERT INTO @Users
SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<ldap: yourdomain.com:389="">;(&(objectClass=User)(|(sAMAccountName=A*)(sAMAccountName=B*)(sAMAccountName=C*)(sAMAccountName=D*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<ldap: yourdomain.com:389="">;(&(objectClass=User)(|(sAMAccountName=E*)(sAMAccountName=F*)(sAMAccountName=G*)(sAMAccountName=H*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL 
SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<ldap: yourdomain.com:389="">;(&(objectClass=User)(|(sAMAccountName=I*)(sAMAccountName=J*)(sAMAccountName=K*)(sAMAccountName=L*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<ldap: yourdomain.com:389="">;(&(objectClass=User)(|(sAMAccountName=M*)(sAMAccountName=N*)(sAMAccountName=O*)(sAMAccountName=P*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL 
SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<ldap: yourdomain.com:389="">;(&(objectClass=User)(|(sAMAccountName=Q*)(sAMAccountName=R*)(sAMAccountName=S*)(sAMAccountName=T*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<ldap: yourdomain.com:389="">;(&(objectClass=User)(|(sAMAccountName=U*)(sAMAccountName=V*)(sAMAccountName=W*)(sAMAccountName=X*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL 
SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<ldap: yourdomain.com:389="">;(&(objectClass=User)(|(sAMAccountName=Y*)(sAMAccountName=Z*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')

RETURN
END
GO
</ldap:></ldap:></ldap:></ldap:></ldap:></ldap:></ldap:>

Похожие вопросы