sql >> データベース >  >> RDS >> Sqlserver

Active Directory グループ メンバーシップの C# clr udf

    ほとんどの場合、これらのアセンブリはすべて UNSAFE に設定する必要があります 、特に 3 つの System.DirectoryServices* インポートした .NET Framework ライブラリ。また、サポートされていない .NET Framework ライブラリ をインポートしているため、 、データベースを TRUSTWORTHY ON に設定する必要があります それらを機能させるために。データベースを TRUSTWORTHY ON に設定する 通常、これはセキュリティ リスクであるため避けたいものですが、この場合、回避できるとは思いません。

    とはいえ、SQLCLR でこの関数を自分で作成する必要があるかどうかはわかりません。ログイン (明らかに Windows ログインのみ) が特定の Active Directory グループに属しているかどうかを知りたい場合は、すべき組み込み関数があります。 あなたのためにそれをしてください。 IS_MEMBER 関数は現在のかどうかを示します ログインは、指定された Windows グループのメンバーです (Domain\Group として指定) )。作成中の関数とは対照的に、この関数がどのように機能するかの違いは、現在のログインに対してのみ機能することです。任意のログインを渡すことはできません。しかし、これの一部である余分な労力やセキュリティ リスクも必要ありません。 SQLCLR ソリューション。ですから、考慮すべきことがあります :-)。

    この回答に対する O.P. からのコメント:

    その場合は、ダイナミック SQL を通常の 1 層ではなく 2 層深くするだけです。次のようなもの:

    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; -- DEBUGEXEC (@SQL);  

    このアプローチでは、 OPENQUERY を実行するクエリ 動的 SQL ですが、OPENQUERY に指定されたクエリは to execute は文字列リテラルです。




    1. Postgres:単一の行を複数の行に変換します(ピボット解除)

    2. MySQLテーブルですべての大文字の文字列を見つける方法は?

    3. OracleASエイリアスが機能しない

    4. タイプ別にグループ化された特定の日付に最も近いレコードを取得します