sql >> Database >  >> RDS >> Sqlserver

C# clr udf voor lidmaatschap van Active Directory-groep

Hoogstwaarschijnlijk moeten al die Assemblies worden ingesteld op UNSAFE , vooral de drie System.DirectoryServices* .NET Framework-bibliotheken die u hebt geïmporteerd. En aangezien u niet-ondersteunde .NET Framework-bibliotheken importeert , moet u de database instellen op TRUSTWORTHY ON om ze aan het werk te krijgen. Een database instellen op TRUSTWORTHY ON is typisch iets dat je wilt vermijden, omdat het een veiligheidsrisico is, maar in dit geval geloof ik niet dat het kan worden vermeden.

Dat gezegd hebbende, weet ik niet zeker of je deze functie zelfs zelf in SQLCLR moet maken. Als u alleen wilt weten of een Login (uiteraard alleen Windows Logins) tot een bepaalde Active Directory-groep behoort, is er een ingebouwde functie die moet doe dat voor je. De IS_MEMBER functie zal aangeven of de huidige Login is een lid van de opgegeven Windows-groep (aangegeven als Domain\Group ). Het verschil in hoe deze functie werkt in tegenstelling tot de functie die u aan het maken bent, is dat deze alleen werkt voor de huidige Login; u kunt er geen willekeurige Login in doorgeven. MAAR, het vereist ook geen van de extra inspanningen en veiligheidsrisico's die deel uitmaken van dit SQLCLR-oplossing. Dus iets om over na te denken :-).

Commentaar van O.P. op dit antwoord:

Maak in dat geval de Dynamic SQL gewoon twee lagen diep in plaats van de gebruikelijke één laag. Iets in de trant van:

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

In deze benadering wordt de query die OPENQUERY . uitvoert, is Dynamic SQL, maar de query gegeven aan OPENQUERY uitvoeren is een letterlijke tekenreeks.




  1. JS Kan MySQL-database niet opvragen. FOUT:verbinding.query is geen functie

  2. LINQ-naar-XYZ-polymorfisme?

  3. liferay migreert gegevens van hsql naar mysql

  4. Hoe voorkom je dat een gebruiker andere databases en de tabellen uit andere databases kan zien?