Active Directory 是用於 Windows Server 的目錄服務
它存儲著網絡上各種對象的有關信息
Active Directory 目錄服務使用結構化的數據存儲作為目錄信息的邏輯層次結構的基礎
通過登錄驗證以及目錄中對象的訪問控制
目錄服務
例如
LDAP是輕量目錄訪問協議
LDAP是基於X
LDAP 僅通過使用原始 X
與X
LDAP和關系數據庫是兩種不同層次的概念
LDAP是一個比關系數據庫抽象層次更高的存貯概念
在Delphi中可以使用微軟的ADSI(活動目錄服務接口)來訪問活動目錄
ADSI是一組以COM接口的形式提供目錄服務的
一些標准的ADSI提供者(Provider)有WinNT
可以通過ADSI存取四種網絡目錄結構
WinNT (Microsoft SAM 數據庫)
ADSI可以使Windows NT 管理員的工作變得輕松
ADSI支持管理員執行一些一般的管理任務
因為ADSI使用COM接口
如在Delphi中調用ADSI
操作如下
在IDE中
選擇
Delphi會做相應的封裝
Uses ActiveDs_TLB
package ADOper;
import java
import javax
import javax
import javax
import javax
import javax
import javax
import javax
import javax
import javax
import java
public class ADOperTest {
public ADOperTest() {
}
public void GetADInfo() {
Hashtable HashEnv = new Hashtable();
String LDAP_URL =
//String adminName =
String adminName =
adminName =
String adminPassword =
HashEnv
HashEnv
HashEnv
HashEnv
HashEnv
try {
LdapContext ctx = new InitialLdapContext(HashEnv
SearchControls searchCtls = new SearchControls(); //Create the search controls
searchCtls
String searchFilter =
//String searchFilter =
String searchBase =
int totalResults =
//Specify the attributes to return
//String returnedAtts[] = {
String returnedAtts[] = {
searchCtls
//Search for objects using the filter
NamingEnumeration answer = ctx
while (answer
SearchResult sr = (SearchResult) answer
System
System
Attributes Attrs = sr
if (Attrs != null) {
try {
for (NamingEnumeration ne = Attrs
Attribute Attr = (Attribute) ne
System
//讀取屬性值
for (NamingEnumeration e = Attr
System
}
System
//讀取屬性值
Enumeration values = Attr
if (values != null) { // 迭代
while (values
System
}
}
System
}
}
catch (NamingException e) {
System
}
}
}
System
ctx
}
catch (NamingException e) {
e
System
}
}
public static void main(String args[]) {
ADOperTest ad = new ADOperTest();
ad
}
}
備注
使用LADP訪問AD
如用戶名不正確
javax
unit Unt_AD;
interface
uses
Windows
Dialogs
type
TMainFrm = class(TForm)
grp
cbUseLogin: TCheckBox;
lbl
ADSIUsername: TEdit;
lbl
ADSIPassword: TEdit;
ADSIDomainName: TEdit;
btn
lbl
GroupListView: TListView;
ComputerListView: TListView;
SeverListView: TListView;
UserListView: TListView;
lbl
lbl
Label
lbl
procedure btn
private
{ Private declarations }
procedure GetDomainInformation(Domain: IADsContainer);
procedure AddUserToList(ADsObj:IADs);
procedure AddGroupToList(ADsObj:IADs);
procedure AddComputerToList(ADsObj:IADs);
public
{ Public declarations }
end;
//連接 Win NT 目錄服務就是找到域控制器然後綁定到相應的對象上
//綁定可以通過 ADsGetObject 或 ADsOpenObject 函數來實現
//第一個函數使用登錄用戶缺省的信任級別
//第二個函數允許開發者指定特殊的安全信任機制來綁定 ADSI 對象
//缺省條件下
function ADsGetObject(lpszPathName: PWideChar; //第一個參數是對象的路徑名
const riid: TIID; //第二個參數是對象的接口標識符
out obj): HResult; stdcall; external
//ADsOpenObject 函數在不同的安全認證機制下綁定 ADSI 對象
//它主要是通過調用參數返回的用戶名和口令來認證的
function ADsOpenObject(lpszPathName: PWideChar; //第一個參數是對象的路徑名
lpszUserName: PWideChar; //第二個參數是調用者提供的用戶名
lpszPassword: PWideChar; //第三個參數是調用者提供的口令
dwReserved: LongInt; //第四個參數是一個保留的 provider 標識
const riid: TIID; //第五個參數是請求接口的接口標識符
out obj): HResult; stdcall; external
var
MainFrm: TMainFrm;
implementation
{$R *
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26267.html