Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

C # clr udf cho tư cách thành viên nhóm Active Directory

Nhiều khả năng tất cả các Hội đồng đó sẽ cần được đặt thành UNSAFE , đặc biệt là ba System.DirectoryServices * Thư viện .NET Framework mà bạn đã nhập. Ngoài ra, vì bạn đang nhập thư viện .NET Framework không được hỗ trợ , bạn sẽ cần đặt cơ sở dữ liệu thành TRUSTWORTHY ON để có được họ làm việc. Đặt Cơ sở dữ liệu thành TRUSTWORTHY ON thường là điều bạn muốn tránh vì nó là một rủi ro bảo mật, nhưng trong trường hợp này, tôi không tin rằng nó có thể tránh được.

Điều đó nói rằng, tôi không chắc rằng bạn thậm chí cần tự tạo chức năng này trong SQLCLR. Nếu bạn chỉ muốn biết liệu Đăng nhập (chỉ Windows Logins, hiển nhiên) có thuộc về một nhóm Active Directory cụ thể hay không, thì có một chức năng tích hợp nên làm điều đó cho bạn. IS_MEMBER hàm sẽ cho biết liệu hiện tại Đăng nhập là thành viên của nhóm Windows được chỉ định (được chỉ định là Domain\Group ). Sự khác biệt về cách hoạt động của chức năng này trái ngược với chức năng mà bạn đang tạo là nó chỉ hoạt động cho Đăng nhập hiện tại; bạn không thể vượt qua bất kỳ Đăng nhập tùy ý nào vào đó. NHƯNG, nó cũng không đòi hỏi bất kỳ nỗ lực bổ sung nào và rủi ro bảo mật là một phần của điều này Giải pháp SQLCLR. Vì vậy, một cái gì đó cần xem xét :-).

Nhận xét từ O.P. về câu trả lời này:

Trong trường hợp đó, chỉ cần làm cho Dynamic SQL có hai lớp sâu thay vì một lớp thông thường. Vài nét về:

DECLARE @SQL NVARCHAR(MAX);
SET @SQL = N'
  SELECT *
  FROM   OPENQUERY([LinkedServer], N''
             SELECT *
             FROM   someResource
             WHERE  GroupName=N''''' + @Group + N'''''
             AND    ObjectName=N''''' + @Login + N''''';
                   '');
';

PRINT @SQL; -- DEBUG
EXEC (@SQL);

Trong cách tiếp cận này, truy vấn thực thi OPENQUERY là SQL động, nhưng truy vấn được cung cấp cho OPENQUERY để thực thi là một chuỗi ký tự.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có nên đặt kích thước nhóm tối đa trong chuỗi kết nối cơ sở dữ liệu không? Điều gì xảy ra nếu tôi không làm vậy?

  2. Một bảng máy chủ sql có thể có hai cột nhận dạng không?

  3. Triển khai phân trang bằng cách sử dụng OFFSET FETCH NEXT trong SQL Server

  4. Nhật ký giao dịch SQL Server, Phần 1:Khái niệm cơ bản về ghi nhật ký

  5. Chọn 3 hàng đầu tiên của mỗi bảng trong cơ sở dữ liệu