sql >> Databasteknik >  >> RDS >> Sqlserver

C# clr udf för Active Directory-gruppmedlemskap

Med största sannolikhet kommer alla dessa sammansättningar att behöva ställas in på UNSAFE , särskilt de tre System.DirectoryServices* .NET Framework-bibliotek som du importerade. Dessutom, eftersom du importerar ej stödda .NET Framework-bibliotek , måste du ställa in databasen på TRUSTWORTHY ON för att få dem att arbeta. Ställa in en databas på TRUSTWORTHY ON är vanligtvis något man vill undvika eftersom det är en säkerhetsrisk, men i det här fallet tror jag inte att det går att undvika.

Som sagt, jag är inte säker på att du ens behöver skapa den här funktionen själv i SQLCLR. Om du bara vill veta om en inloggning (uppenbarligen endast Windows-inloggningar) tillhör en viss Active Directory-grupp, finns det en inbyggd funktion som bör gör det åt dig. IS_MEMBER funktionen kommer att indikera om den aktuella Inloggning är medlem i den angivna Windows-gruppen (anges som Domain\Group ). Skillnaden i hur den här funktionen fungerar till skillnad från den du skapar är att den bara fungerar för den aktuella inloggningen; du kan inte skicka någon godtycklig inloggning till den. MEN, det kräver inte heller någon av de extra ansträngningar och säkerhetsrisker som är en del av det här SQLCLR-lösning. Så, något att tänka på :-).

Kommentar från O.P. till detta svar:

I så fall gör du bara Dynamic SQL två lager djupt istället för det vanliga ett lager. Något i stil med:

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 det här tillvägagångssättet exekverar frågan OPENQUERY är dynamisk SQL, men frågan som ges till OPENQUERY att köra är en bokstavlig sträng.




  1. Hur hanterar man partiella datum (2010-00-00) från MySQL i Django?

  2. Hur kombinerar man aggregerade funktioner i MySQL?

  3. Diagram för att uppdatera från ett rullgardinsval

  4. Unit Testing Framework för Oracle PL/SQL?