powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / t-sql get ldap users into table
11 сообщений из 11, страница 1 из 1
t-sql get ldap users into table
    #39569405
Profeccor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток дорогие форумчане.
Использовал до этого СУБД Oracle, сейчас пришлось перейти на ms sql.
Пытаюсь выгрузить список всех пользователей из ldap в таблицу. ( в дальнейшем это должен стать джобом и отрабатываться ночью обновляя информацию о пользовательских данных.)
Как делать джобы я вроде понял. При их создании можно выбрать довольно много вариантов того что они должны исполнять.
я решил сделать самый на текуший момент понятный мне на t-sql. нашел примеры, но что-то не очень понимаю, как они работают.
ПО идее выгрузка из ldapа происходит из под пользователя с правами на чтение. Такой пользователь у меня есть. Все тропинки в структуре я тоже знаю, но не понимаю что писать. Мне бы простенький пример или ссылку на то, как выгрузить пользователя.
Как я понимаю, это должен быть цикл, в котором я получаю по одному пользователю за шаг и записываю его в таблицу, перехожу к следующему.

Заранее спасибо всем откликнувшимся.
...
Рейтинг: 0 / 0
t-sql get ldap users into table
    #39569409
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хто на ком стоял?

"всех пользователей из ldap" - какой-такой LDAP?
Доменный, штоле?


ЗЫ. Учись излагать отсутствие мыслей связно.
...
Рейтинг: 0 / 0
t-sql get ldap users into table
    #39569413
Profeccor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

да! доменных пользователей выгрузить.
...
Рейтинг: 0 / 0
t-sql get ldap users into table
    #39569418
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... лет десять назад я выгружал так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
ALTER PROCEDURE LDAP_SAMName_to_DisplayName_CreateTable
-- обновление данных LDAP домена, чтобы отображать имена пользователей красиво.
AS
SET NOCOUNT ON 
SET XACT_ABORT ON

begin tran LDAP
	if OBJECT_ID('dbo.[LDAP_SAMName_to_DisplayName]') is not null 
		DELETE dbo.[LDAP_SAMName_to_DisplayName]
	else begin
		CREATE TABLE dbo.[LDAP_SAMName_to_DisplayName] (
			[DisplayName] [nvarchar] (256) COLLATE Cyrillic_General_CI_AS NOT NULL ,
			[AccountName] [nvarchar] (256) COLLATE Cyrillic_General_CI_AS NOT NULL ,
			[SAMAccountName] [nvarchar] (128) COLLATE Cyrillic_General_CI_AS NOT NULL ,
			CONSTRAINT [PK_LDAP_SAMName_to_DisplayName] PRIMARY KEY  CLUSTERED ([AccountName]) 
		)	
		CREATE  UNIQUE  INDEX [IX_LDAP_SAMName_to_DisplayName] ON [dbo].[LDAP_SAMName_to_DisplayName]([SAMAccountName]) 
          end

	declare @sql_template nvarchar(4000), @sql nvarchar(4000), @fqdn nvarchar(128)

	select @fqdn=str FROM dbo.[isa2006 Глобальные параметры] WHERE ID=2
	if @fqdn is null  SET @fqdn=N''

	set @sql_template='SELECT Name DisplayName, ''' + dbo.LDAP_DomainName()+'\''+ SAMAccountName [AccountName], SAMAccountName '
		+' FROM OPENQUERY(ADSI, ''select Name, sAMAccountName from ''''LDAP://'
		+dbo.[LDAP_FQDN->DCs](@fqdn)
		+''''' where objectClass = ''''User'''' and objectCategory=''''Person'''' <<replace>> ORDER BY SAMAccountName ASC '')'
	declare @rc int, @name nvarchar(256)
	set @rc=1
	set @sql=REPLACE(@sql_template, N'<<replace>>', N'')
	while @rc>0 begin
		INSERT INTO dbo.[LDAP_SAMName_to_DisplayName] exec(@sql)
		set @rc=@@rowcount
		if @rc>0 begin
			select top 1 @name = SAMAccountName FROM dbo.[LDAP_SAMName_to_DisplayName]  ORDER BY SAMAccountName DESC
			set @sql=REPLACE(@sql_template, N'<<replace>>', N' AND SAMAccountName>'''''+@name+''''' ')
		end
	end
commit tran LDAP


	RETURN



Работает пока...
...
Рейтинг: 0 / 0
t-sql get ldap users into table
    #39569453
Profeccor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

сделал по статье
http://www.specialist.ru/center/advice/79

все работает.
но при выгрузке не дает больше 900 строк ругается

Cannot fetch a row from OLE DB provider "ADsDSOObject" for linked server "AD".
...
Рейтинг: 0 / 0
t-sql get ldap users into table
    #39569458
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Profeccorно при выгрузке не дает больше 900 строк ругается

Cannot fetch a row from OLE DB provider "ADsDSOObject" for linked server "AD".Так и должно быть. Работать порциями.
...
Рейтинг: 0 / 0
t-sql get ldap users into table
    #39569464
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
t-sql get ldap users into table
    #39569471
Profeccor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

видел эту статью, ничего в ней не понял совсем )).

но на Oracle я тоже обходил ограничения по кол записей. делал это не очень красиво. Тупо перебирая все символы начала имени и подставляя их в cn, но может быть и такое что в рамках одного символа будет больше чем 900 записей и все рухнет, в один прекрасный день )).

Код: plsql
1.
2.
3.
4.
str := 'ёйцукенгшщзхъфывапролджэячсмитьбю qwertyuiopasdfghjklzxcvbnm,.;:[]()\|/~?!@#$%^&*_1234567890+-=<>';
      for i in 1..length(str) loop
        temp := get_group_ldap('OU='||current_select.name||',','(&(objectCategory=group)(cn='||substr(str,i,1)||'*))', current_select.id);
      end loop;



Может есть более красивое решение?
P.S. current_select это еще цикл сверху по определенному строению дерева в AD.

PSS как правильно называть linked server AD или LDAP ? чисто из эстетических соображений.
...
Рейтинг: 0 / 0
t-sql get ldap users into table
    #39569481
Profeccor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222

Подскажите что у Вас хранится в таблице
Код: sql
1.
"dbo.[LDAP_FQDN->DCs](@fqdn)"


Там лежат ветки к определеным разделам с пользователями?
Если число пользователей в ветке превысит 900?
...
Рейтинг: 0 / 0
t-sql get ldap users into table
    #39569486
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Profeccorвидел эту статью, ничего в ней не понял совсем )).Это один из вариантов обхода ограничения; автор сделал сборки CLR процедур для работы с AD (лежат в прикреплённом архиве MSADHelper2.rar), и показал, как ими пользоваться.
...
Рейтинг: 0 / 0
t-sql get ldap users into table
    #39569562
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Profeccoraleks222

Подскажите что у Вас хранится в таблице
Код: sql
1.
"dbo.[LDAP_FQDN->DCs](@fqdn)"


Там лежат ветки к определеным разделам с пользователями?
Если число пользователей в ветке превысит 900?

Осподе, горе-программизд детектед!

Цикл там зачем? Анализируй ЭТО.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / t-sql get ldap users into table
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]