sql >> Databáze >  >> RDS >> Sqlserver

C# clr udf pro členství ve skupině Active Directory

S největší pravděpodobností budou muset být všechny tyto sestavy nastaveny na UNSAFE , zejména tři System.DirectoryServices* .NET Framework knihovny, které jste importovali. Vzhledem k tomu, že importujete nepodporované knihovny .NET Framework , budete muset databázi nastavit na TRUSTWORTHY ON aby je dostali do práce. Nastavení databáze na TRUSTWORTHY ON je obvykle něco, čemu se chcete vyhnout, protože jde o bezpečnostní riziko, ale v tomto případě si nemyslím, že se tomu dá vyhnout.

To znamená, že si nejsem jistý, zda vůbec potřebujete tuto funkci vytvořit sami v SQLCLR. Pokud jen chcete vědět, zda Přihlášení (samozřejmě pouze přihlášení Windows) patří do určité skupiny Active Directory, existuje vestavěná funkce, která by měla udělej to pro tebe. IS_MEMBER funkce ukáže, zda je aktuální Login je členem zadané skupiny Windows (určené jako Domain\Group ). Rozdíl v tom, jak tato funkce funguje oproti té, kterou vytváříte, spočívá v tom, že funguje pouze pro aktuální přihlášení; nemůžete do něj vložit libovolné přihlášení. ALE také to nevyžaduje žádné další úsilí a bezpečnostní rizika, která jsou součástí tohoto řešení SQLCLR. Takže něco ke zvážení :-).

Komentář od O.P. k této odpovědi:

V takovém případě stačí vytvořit z dynamického SQL dvě vrstvy hluboké místo obvyklé jedné vrstvy. Něco ve smyslu:

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

V tomto přístupu je dotaz spouštějící OPENQUERY je dynamický SQL, ale dotaz zadaný OPENQUERY spustit je řetězcový literál.




  1. Sequelizovat spojení dvou tabulek, které nejsou spojeny

  2. Vkládání národních znaků do sloupce Oracle NCHAR nebo NVARCHAR nefunguje

  3. Vložte ckeditor html kód do databáze

  4. Stejný dílčí dotaz použitý vícekrát v jednom dotazu