Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

C# clr udf untuk keanggotaan grup Direktori Aktif

Kemungkinan besar semua Majelis tersebut perlu disetel ke UNSAFE , terutama tiga System.DirectoryServices* Pustaka .NET Framework yang Anda impor. Selain itu, karena Anda mengimpor library .NET Framework yang tidak didukung , Anda perlu mengatur database ke TRUSTWORTHY ON untuk membuat mereka bekerja. Mengatur Database ke TRUSTWORTHY ON biasanya adalah sesuatu yang ingin Anda hindari karena merupakan risiko keamanan, tetapi dalam kasus ini saya tidak yakin bahwa hal itu dapat dihindari.

Yang mengatakan, saya tidak yakin bahwa Anda bahkan perlu membuat fungsi ini sendiri di SQLCLR. Jika Anda hanya ingin tahu apakah Login (Login Windows saja, tentu saja) milik grup Active Directory tertentu, ada fungsi bawaan yang harus lakukan itu untukmu. IS_MEMBER fungsi akan menunjukkan jika saat ini Login adalah anggota grup Windows yang ditentukan (ditentukan sebagai Domain\Group ). Perbedaan cara kerja fungsi ini dibandingkan dengan yang Anda buat adalah fungsi ini hanya berfungsi untuk Login saat ini; Anda tidak dapat memasukkan Login sewenang-wenang ke dalamnya. TAPI, itu juga tidak memerlukan upaya ekstra dan risiko keamanan apa pun yang merupakan bagian dari ini solusi SQLCLR. Jadi, sesuatu yang perlu dipertimbangkan :-).

Komentar dari O.P. pada jawaban ini:

Dalam hal ini, buat saja SQL Dinamis dua lapisan dalam, bukan satu lapisan biasa. Sesuatu di sepanjang baris:

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);

Dalam pendekatan ini, kueri mengeksekusi OPENQUERY adalah SQL Dinamis, tetapi kueri yang diberikan ke OPENQUERY untuk dieksekusi adalah string literal.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara tercepat untuk menentukan apakah ada catatan

  2. SQL MAX dari beberapa kolom?

  3. Pilih catatan terakhir dari tabel menggunakan grup menurut

  4. INSERT nilai yang dihapus ke dalam tabel sebelum DELETE dengan DELETE TRIGGER

  5. Cara paling efisien untuk memindahkan baris tabel dari satu tabel ke tabel lainnya