Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADSI Как получить реквизиты пользователя в домене? [D7, MSSQL]


gedd ©   (2003-10-29 11:27:00) 

ADSI Как получить реквизиты пользователя в домене используя ADO?
Помогите кто знает лучше кодом.


paul_k   (2003-11-03 16:49:00) [1]

Поищи в хелпе от (SQL serverbooks online,Query Analiser -> F1).
Например

OLE DB Provider for Microsoft Directory Services
The Microsoft OLE DB Provider for Microsoft Directory Services provides access to information in the Microsoft® Windows® 2000 Directory Service. This OLE DB Provider supports two command dialects, LDAP and SQL, to access the directory service and return results in a tabular form that can be queried using SQL Server distributed queries.

To create a linked server against Windows 2000 Directory Service

Create a linked server using ADSDSOObject as the provider_name and adsdatasource as the data_source argument of the sp_addlinkedserver system stored procedure.
EXEC sp_addlinkedserver "ADSI", "Active Directory Services 2.5",
"ADSDSOObject", "adsdatasource"
GO

For Windows authenticated logins, the self-mapping is sufficient to access the directory using SQL Server Security Delegation. Because the self-mapping is created by default for linked servers created through sp_addlinkedserver, no other login mapping is necessary.

For SQL Server authenticated logins, suitable login/passwords can be configured for connecting to the directory service using the sp_addlinkedsrvlogin system stored procedure.

Querying the Directory Service
The Microsoft OLE DB Provider for Microsoft Directory Services supports two command dialects, LDAP and SQL, to query the Directory Service. The OPENQUERY function can be used to send a command to the Directory Service and consume its results in a SELECT statement.

The following example shows creating a view that uses OPENQUERY to return information from the directory at the server ADSISrv whose domain address is sales.northwind.com. The command inside the OPENQUERY function is an SQL query against the directory to return the Name, SN, and ST attributes of objects belonging to Class Contact at a specified hierarchical location (OU=Sales) in the directory. The view then can be used in any SQL Server queries.

CREATE VIEW viewADContacts
AS
SELECT [Name], SN [Last Name], ST State
FROM OPENQUERY( ADSI,
"SELECT Name, SN, ST
FROM ""LDAP://ADSISrv/ OU=Sales,DC=sales,DC=northwind,DC=com""
WHERE objectCategory = ""Person"" AND
objectClass = ""contact""")
GO
SELECT * FROM viewADContacts

For more information about the LDAP and SQL dialects, see Microsoft Active Directory Services documentation.

©1988-2000 Microsoft Corporation. All Rights Reserved.


gedd   (2003-11-03 14:00:00) [2]

Я никогда не работал с ADSI, хотя с базами данных работаю уже
долго и постоянно. Так Linked servers я ничего не понял
как это сделать и где это все находится? Поподробнее!


paul_k   (2003-10-31 10:57:00) [3]

2 Gedd
Напиши и отладь сначала селект в аналайзере.
данные лежат в древовидной структуре
запрос вс-же надо было написать
select * from openquery(ADSI,"select * from "LDAP:// DC=torg")
это даст тебе строки для 1-го уровня.
что-бы сервер смог подключится к этим данным надо "объяснить" ему где что брать. Для этого существует понятие "Linked servers"


gedd   (2003-10-31 10:06:00) [4]

Поставил
form1.ADOQuery1.ParamCheck := false;
и попробовал
select * from openquery(ADSI,"select * from "LDAP:// DC=torg,ВС=local"")

Он сказал одна или более ошибок произошли в процессе выполнения


paul_k   (2003-10-30 13:42:00) [5]

2 lmatveev
Query Analiser параметров не проверяет, к счастью


lmatveev   (2003-10-30 13:26:00) [6]

У тебя выдается ошибка из-за того, что в команде присутствует ":" и Delphi, разбирая твою команду считает, что дальше идет имя параметра. Чтобы этого избежать добавь в начале своего кода:
form1.ADOQuery1.ParamCheck := false;


paul_k   (2003-10-30 11:36:00) [7]

прошу прощения MS SDK Help


paul_k   (2003-10-30 11:34:00) [8]


> Что значит прилинковать ADSI сервер?

To create a linked server against Windows 2000 Directory Service

Create a linked server using ADSDSOObject as the provider_name and adsdatasource as the data_source argument of the sp_addlinkedserver system stored procedure.
EXEC sp_addlinkedserver "ADSI", "Active Directory Services 2.5",
"ADSDSOObject", "adsdatasource"
GO

попробуй
select * from openquery(ADSI,"select * from "LDAP:// DC=domain_name"" )

от нужного места разворачивай дерево
названия ключей, насколько я понял может быть разным в зависимости от того что под что задействовали. Так что те поля, что я использую могут тебе не подойти.
и почитай MSDN на эту тему


gedd   (2003-10-30 11:25:00) [9]

Вообщем он пишет
Parameter object is improperly defined.
Inconsistent or incomplete information was provided.
строка sql была такая

select displayName,mail,company,Department,title,TelephoneNumber,PhysicalDeliveryOfficeName,userPrincipalName
from openquery(ADSI,"select * from "LDAP://OU=Users, DC=torg, DC=local"" )
where displayName is not null


gedd   (2003-10-30 11:17:00) [10]

Что значит прилинковать ADSI сервер?
По поводу прав: данные узверя может получить любой пользовательв домене. Однако проверю на всякий случай.


paul_k   (2003-10-30 09:01:00) [11]

3-е
А ты уверен, что прав у тебя достаточно на получение данных от домен-контроллера?


paul_k   (2003-10-30 09:00:00) [12]

1. ADSI сервер прилинковал?
2. если да, то ошибка из-за того, что пустышку тянеш
попробуй
select * from openquery(ADSI,"select * from "LDAP:// DC=domain_name"" )
и дальше смотри что тебе надо. Учти что это не таблица а дерево


gedd   (2003-10-30 08:16:00) [13]

Пробовал так
form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add("select * from");
form1.ADOQuery1.SQL.Add("openquery(ADSI,"select * from "+""""+"LDAP://OU=Users, DC=torg,DC=local"+""""+"" ) ");
form1.ADOQuery1.SQL.Add("where displayName is not null");
form1.ADOQuery1.Open;

Выдает ошибку во второй строке, в чем проблема то?
Строка подключения
Provider=ADsDSOObject;Encrypt Password=False;Integrated Security=SSPI;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648

в DataSource and Location ничего не указывал.
Provider = Ole DB Provider for Microsoft Directory Services


gedd   (2003-10-30 07:50:00) [14]

Спасибо пробую разобраться
кстати dc - имя конроллера домена?


paul_k   (2003-10-29 12:39:00) [15]

Некое описание подобных задач мне на SQL.RU попадалось


paul_k   (2003-10-29 12:27:00) [16]

Кодом - пожалста
insert into #t_domain_users
select displayName,mail,company,Department,title,TelephoneNumber,PhysicalDeliveryOfficeName,userPrincipalName,"CTBM"+"\"+sAMAcc ountName from openquery(ADSI,"select displayName,mail,userPrincipalName,company,Department,title,TelephoneNumber,PhysicalDeliveryOfficeName,sAMAccountName from "LDAP://OU=Users_Paveleckaya, DC=ctbm"" )
where displayName is not null


А вообще - Query Analiser - F1

Querying the Directory Service
The Microsoft OLE DB Provider for Microsoft Directory Services supports two command dialects, LDAP and SQL, to query the Directory Service. The OPENQUERY function can be used to send a command to the Directory Service and consume its results in a SELECT statement.

The following example shows creating a view that uses OPENQUERY to return information from the directory at the server ADSISrv whose domain address is sales.northwind.com. The command inside the OPENQUERY function is an SQL query against the directory to return the Name, SN, and ST attributes of objects belonging to Class Contact at a specified hierarchical location (OU=Sales) in the directory. The view then can be used in any SQL Server queries.

CREATE VIEW viewADContacts
AS
SELECT [Name], SN [Last Name], ST State
FROM OPENQUERY( ADSI,
"SELECT Name, SN, ST
FROM ""LDAP://ADSISrv/ OU=Sales,DC=sales,DC=northwind,DC=com""
WHERE objectCategory = ""Person"" AND
objectClass = ""contact""")
GO
SELECT * FROM viewADContacts


Наверх

Титульная страница Поиск, карта сайта Написать письмо