Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

C# clr udf за членство в група на Active Directory

Най-вероятно всички тези сборки ще трябва да бъдат зададени на UNSAFE , особено трите System.DirectoryServices* .NET Framework библиотеки, които сте импортирали. Освен това, тъй като импортирате неподдържани библиотеки на .NET Framework , ще трябва да настроите базата данни на TRUSTWORTHY ON за да ги накарате да работят. Задаване на база данни на TRUSTWORTHY ON обикновено е нещо, което искате да избегнете, тъй като е риск за сигурността, но в този случай не вярвам, че може да бъде избегнато.

Въпреки това не съм сигурен, че дори трябва да създадете тази функция сами в SQLCLR. Ако просто искате да знаете дали дадено влизане (само за влизане в Windows, очевидно) принадлежи към определена група на Active Directory, има вградена функция, която трябва направи това за теб. IS_MEMBER функция ще покаже дали текущият Login е член на посочената група Windows (посочена като Domain\Group ). Разликата в начина, по който работи тази функция за разлика от тази, която създавате е, че тя работи само за текущото влизане; не можете да подадете произволен вход в него. НО също така не изисква никакви допълнителни усилия и рискове за сигурността, които са част от това SQLCLR решение. И така, нещо, което трябва да имате предвид :-).

Коментар от O.P. за този отговор:

В такъв случай просто направете Dynamic SQL на два слоя вместо обичайния един слой. Нещо от рода на:

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

При този подход заявката, изпълняваща OPENQUERY е Dynamic SQL, но заявката, дадена на OPENQUERY за изпълнение е низов литерал.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създайте база данни в SQL Server 2017

  2. Трудност при записването на Stored Proc за извличане на данни за Jqgrid Pagination

  3. Оптимален начин за конкатенация/обединяване на низове

  4. Изберете непразни колони с помощта на SQL Server

  5. SQL:Как мога да получа стойността на атрибут в XML тип данни?