Чистим сервер БД от учёток отключенных в AD (ADSI)

by Alexey Knyazev 24. сентября 2009 21:11

Совсем недавно я описывал способ, как удалить отлюченные учётки с сервера БД с помощью PowerShell.

Теперь покажу способ, как получить доступ к АД средствами самого SQL Server`a через ADSI (Active Directory Service Interfaces), протокол LDAP (Lightweight Directory Access Protocol).

Для начала добавим Linked Server:

sp_addlinkedserver 'ADSI', 'Active Directory Service', 'ADSDSOObject', 'adsdatasource'

Но тут могут возникнуть трудности, возможно потребуется явно указать УЗ, у которой есть доступ к АД. А теперь, при наличии прав, можно обращаться к АД запросами t-sql:

select  * from OpenQuery(ADSI,
'LDAP://DC=MyDomain,DC=ru;((objectCategory=Person));
 Name, UserAccountControl, samaccountname
;subtree')
 where UserAccountControl&2=2

 

Этот скрипт вернёт мне УЗ, которые отключены.

Значения, которые для UserAccountControl:

typedef enum {

  • ADS_UF_SCRIPT = 1, // 0x1
  • ADS_UF_ACCOUNTDISABLE = 2, // 0x2
  • ADS_UF_HOMEDIR_REQUIRED = 8, // 0x8
  • ADS_UF_LOCKOUT= 16, // 0x10
  • ADS_UF_PASSWD_NOTREQD= 32, // 0x20
  • ADS_UF_PASSWD_CANT_CHANGE= 64, // 0x40
  • ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 128, // 0x80
  • ADS_UF_TEMP_DUPLICATE_ACCOUNT= 256, // 0x100
  • ADS_UF_NORMAL_ACCOUNT = 512, // 0x200
  • ADS_UF_INTERDOMAIN_TRUST_ACCOUNT= 2048, // 0x800
  • ADS_UF_WORKSTATION_TRUST_ACCOUNT= 4096, // 0x1000
  • ADS_UF_SERVER_TRUST_ACCOUNT = 8192, // 0x2000
  • ADS_UF_DONT_EXPIRE_PASSWD = 65536, // 0x10000
  • ADS_UF_MNS_LOGON_ACCOUNT= 131072, // 0x20000
  • ADS_UF_SMARTCARD_REQUIRED = 262144, // 0x40000
  • ADS_UF_TRUSTED_FOR_DELEGATION = 524288, // 0x80000
  • ADS_UF_NOT_DELEGATED= 1048576, // 0x100000
  • ADS_UF_USE_DES_KEY_ONLY= 2097152, // 0x200000
  • ADS_UF_DONT_REQUIRE_PREAUTH= 4194304, // 0x400000
  • ADS_UF_PASSWORD_EXPIRED = 8388608, // 0x800000
  • ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION= 16777216 // 0x1000000

} ADS_USER_FLAG_ENUM;

Подробно описано тут: http://msdn.microsoft.com/ru-ru/library/aa772300(en-us,VS.85).aspx

 

Есть одно ограничение: поумолчанию выводится только 1000 объектов, но это можно исправить с помощью утилиты Ntdsutil.exe. Ну а далее, используя этот набор записей, можно легко отключить (удалить) эти учётки с сервера БД (либо скриптом на T-SQL из поста про PowerShell, либо написать свой код).

Tags: ,

SQL Server

Комментарии (1) -

Добавить комментарий

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading