sql >> Database teknologi >  >> RDS >> Sqlserver

C# clr udf til Active Directory-gruppemedlemskab

Mest sandsynligt skal alle disse samlinger indstilles til UNSAFE , især de tre System.DirectoryServices* .NET Framework-biblioteker, som du har importeret. Da du også importerer ikke-understøttede .NET Framework-biblioteker , skal du indstille databasen til TRUSTWORTHY ON for at få dem til at arbejde. Indstilling af en database til TRUSTWORTHY ON er typisk noget man vil undgå, da det er en sikkerhedsrisiko, men i dette tilfælde tror jeg ikke på, at det kan undgås.

Når det er sagt, er jeg ikke sikker på, at du overhovedet behøver at oprette denne funktion selv i SQLCLR. Hvis du bare vil vide, om et login (kun Windows-login, naturligvis) tilhører en bestemt Active Directory-gruppe, er der en indbygget funktion, som skal gør det for dig. IS_MEMBER funktionen vil angive, om den aktuelle Login er medlem af den angivne Windows-gruppe (specificeret som Domain\Group ). Forskellen i, hvordan denne funktion fungerer i modsætning til den, du opretter, er, at den kun virker for det aktuelle login; du kan ikke sende noget vilkårligt login ind i det. MEN det kræver heller ikke nogen af ​​den ekstra indsats og sikkerhedsrisici, der er en del af dette SQLCLR løsning. Så noget at overveje :-).

Kommentar fra O.P. til dette svar:

I så fald skal du bare lave den dynamiske SQL to lag dybt i stedet for det sædvanlige ene lag. Noget i retning af:

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

I denne tilgang udfører forespørgslen OPENQUERY er dynamisk SQL, men forespørgslen givet til OPENQUERY at udføre er en streng bogstavelig.




  1. Sådan migrerer du SQL Server-job fra en SQL Server-instans til en anden

  2. Hvilket er bedre:mysql_connect eller mysql_pconnect

  3. er der nogen måde at få listen over den indbyggede funktion af sql-serveren?

  4. Hvor ikke Exists en Laravel