SSRS(T-SQL)でレポートを作成する必要があります。このユーザーは、読み取りアクセス権を持つSSRSレポートサーバー現在のActive Directory問題を複雑にするために、Active Directoryにはグループ要素としてグループが設定されていません.ADのすべてのユーザーはobjectClass = UserおよびobjectCategory = Personです。SQLでActive Directoryのグループとメンバーを判別する最も簡単な方法
私の質問は、グループ名が何であるかを知らなくても(「変更される可能性がある」など)、ユーザーをすべての「memberOf」要素に一致させるクエリを作成するにはどうすればよいですか?そこから、各要素をレポートにどのようにマッチさせるかをまとめて考えることができます。
編集:これまでに私が書いたことは次のとおりです。構文エラーのためにプロシージャを作成していませんが、エラーを特定できません。
USE [ReportServer]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[ActiveDirectoryPermissions]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Table1 TABLE
(
[GroupName] nvarchar(MAX),
[GroupPath] nvarchar(MAX)
)
INSERT INTO @Table1 ([GroupName], [GroupPath])
SELECT sAMAccountName as [GroupName], replace(ADsPath,'LDAP://','') as [GroupPath]
FROM OPENQUERY(ADSI,
'SELECT sAMAccountname, ADsPath
FROM ''LDAP://DC=[REDACTED],DC=COM''
WHERE objectCategory=''group'' AND CN=''*''
ORDER BY CN')
DECLARE @Table2 TABLE
(
[GroupPath] nvarchar(MAX),
[MemberName] nvarchar(MAX)
)
DECLARE table_1_cursor CURSOR FOR
SELECT GroupPath
FROM @Table1 t1
DECLARE @SQL nvarchar(MAX)
DECLARE @temp nvarchar(MAX)
OPEN table_1_cursor
FETCH NEXT FROM table_1_cursor INTO @temp
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'SELECT '''[email protected]+''' AS GroupPath, cn
FROM OPENQUERY(ADSI,
''SELECT cn
FROM ''''LDAP://DC=[REDACTED],DC=com''''
WHERE
memberOf='''''[email protected]+'''''
'')'
INSERT INTO @Table2 ([GroupPath], [MemberName])
EXEC sp_executesql @SQL;
FETCH NEXT FROM table_1_cursor INTO @temp
END
CLOSE table_1_cursor
DEALLOCATE table_1_cursor
SELECT *
FROM @Table2 t2
INNER JOIN @Table1 t1 ON (t2.GroupPath=t1.GroupPath)
GO
構文エラーが原因でコンパイルを拒否するコードを追加しましたが、エラーが見つかりません。 –
レベル102、レベル15、状態1、プロシージャActiveDirectoryPermissions、行56 [バッチ開始行8] ')'の近くの構文が正しくありません。 –
うん。私がこれを読む前に欠落している「END」を捕まえた。 * derp * ADSIはADを公開するリンクサーバーです。これは今すぐ動作するはずです。あなたの助けをありがとう、マイク! –