Tôi có thể truy vấn Active Directory từ SQL Server 2005 bằng cách nào?Truy vấn Active Directory từ SQL Server 2005
Trả lời
Câu hỏi khá chung nhưng dưới đây là một số gợi ý.
Bạn cần một máy chủ được liên kết tạo trên máy chủ SQL trỏ đến ADSI (Giao diện dịch vụ thư mục hoạt động) một cái gì đó như thế này sẽ làm điều đó.
EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 'ADSDSOObject', 'adsdatasource'
Sau đó, bạn có thể sử dụng loại truy vấn sau.
SELECT *
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName
FROM ''LDAP://DC=MyDC,DC=com,DC=uk''
WHERE objectCategory = ''Person''
AND objectClass = ''user'')
Bạn sẽ cần phải đặt LDAP: // dòng một cách thích hợp (yêu cầu AD admin của bạn cho các chi tiết) và lưu ý rằng Adhoc phân phối truy vấn sử dụng OpenQuery bị vô hiệu hóa theo mặc định trong SQL Server. Một khi bạn có ở trên mặc dù nó phải được khá dễ dàng để google cho bất kỳ biến thể cụ thể.
Có.
Linked server:
EXEC master.dbo.sp_addlinkedserver
@server = N'ADSI',
@srvproduct=N'Active Directory Services',
@provider=N'ADsDSOObject',
@datasrc=N'Servername.domain.com'
Query:
select * from openquery
(
ADSI,'SELECT name
FROM ''LDAP://Servername.domain.com''
WHERE objectCategory = ''Person'' AND objectClass = ''user''
')
Có rất nhiều ví dụ nếu bạn tìm kiếm liên kết máy chủ và LDPA trên Google. Tôi nói điều này vì LDAP có thể khá phức tạp để làm việc.
Để khắc phục giới hạn tối đa 1000 bản ghi được trả lại cùng một lúc từ truy vấn Active Directory, bạn có thể sử dụng hàm mà tôi đã viết bên dưới.
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
Chỉ cần lưu ý; để xóa liên kết sử dụng
exec sp_dropserver 'ADSI';
Cảm ơn bạn đã đề cập đến điều này! – Calanus
- 1. Truy vấn Active Directory bằng "SQL"?
- 2. Cách truy xuất SAMAccountName từ Active Directory
- 3. SQL Server 2005 Dấu thời gian ngày Truy vấn
- 4. Truy vấn phân cấp trong SQL Server 2005
- 5. Vấn đề chặn SQL Server 2005 (ASYNC_NETWORK_IO)
- 6. Truy vấn SQL Server từ PHP
- 7. Cách sử dụng truy vấn chọn bên trong truy vấn chèn trong SQL Server 2005
- 8. Thời gian truy cậpZoneInfo từ SQL 2005 Server
- 9. Truy vấn SQL để thêm cột mới sau cột hiện có trong SQL Server 2005
- 10. Gerrit và Active Directory
- 11. SQL Server 2005 Replication
- 12. Display thumbnailPhoto từ Active Directory trong PHP
- 13. ASP.NET Active Directory Search
- 14. Active Directory vs OpenLDAP
- 15. Isoweek trong SQL Server 2005
- 16. Truy vấn đệ quy SQL Server
- 17. SQL Server 2005 Làm thế nào để bạn xóa một kế hoạch thực thi truy vấn
- 18. SQL Server 2005: Chèn nhiều hàng với một truy vấn đơn
- 19. SQL server 2005 mất chính xác số
- 20. Connect ray ứng dụng SQL Server 2005 từ Windows
- 21. Cách tạo thư mục hệ thống tệp trong cuộc gọi/truy vấn SQL Server 2005
- 22. Mẹo và thủ thuật về tối ưu hóa truy vấn [SQL Server 2005]
- 23. Làm cách nào để khôi phục truy vấn UPDATE trong SQL Server 2005?
- 24. SQL Server 2005 Đặt biến thành kết quả của truy vấn chọn
- 25. Chèn Microsoft SQL Server từ truy vấn chọn
- 26. Chỉ nhận tài khoản đã kích hoạt từ Active Directory
- 27. Trích xuất một Hội đồng .NET từ SQL Server 2005
- 28. Active Directory: Truy xuất thông tin người dùng
- 29. Đường dẫn Active Directory LDAP
- 30. Chính xác SQL Server 2005 là gì?
Có phải liên kết đến chỉ đọc AD hoặc bạn có thể chèn qua tuyến đường này không? – Kristen
Không, nó chỉ chọn nhưng bạn có thể sử dụng mô hình đối tượng COM ADSI để tạo người dùng. Có phần giới thiệu ở đây http://en.csharp-online.net/User_Management_with_Active_Directory –