イントラネット製品からレポート サービスにシングル サインオンできるカスタム セキュリティ拡張機能を開発しました。サブスクリプションに来るまで、それは魅力のように機能します。
開発はここで提案されたようにしました: http://msdn.microsoft.com/en-us/library/ms155029.aspx
ログイン、アップロード、およびレポートの管理が機能します。すべてのユーザーは、レポートを読んで開くことができます。また、ここで説明されているように、認証を実装し、関数を上書きします: http://msdn.microsoft.com/en-us/library/ms152800.aspx
フォルダ、レポートの管理も同様に機能します。
レポートをレンダリングして電子メールで配信するサブスクリプションをアドバタイズすると、システムは、レポートを電子メールで送信するための十分な権限がユーザーにないと言います。
notification!WindowsService_0!1674!10/09/2013-14:02:04:: i INFO: Handling subscription f70f374e-28fa-4ba2-8b0e-6633f1299ee9 to report Projekt Aufwand, owner: rausch, delivery extension: Report Server Email.
library!WindowsService_0!1674!10/09/2013-14:02:04:: i INFO: RenderForNewSession('/Projektverwaltung/Projekt Aufwand')
library!WindowsService_0!1674!10/09/2013-14:02:04:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: , Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: Die dem Benutzer 'rausch' erteilten Berechtigungen reichen zum Ausführen des Vorgangs nicht aus.;
library!WindowsService_0!1674!10/09/2013-14:02:04:: i INFO: Initializing EnableExecutionLogging to 'True' as specified in Server system properties.
emailextension!WindowsService_0!1674!10/09/2013-14:02:04:: e ERROR: Error sending email. Exception: Microsoft.ReportingServices.Diagnostics.Utilities.RSException: Die dem Benutzer 'rausch' erteilten Berechtigungen reichen zum Ausführen des Vorgangs nicht aus. ---> Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: Die dem Benutzer 'rausch' erteilten Berechtigungen reichen zum Ausführen des Vorgangs nicht aus.
notification!WindowsService_0!1674!10/09/2013-14:02:04:: i INFO: Notification 6241f7f4-6225-44ea-b8ff-3654960ae218 completed. Success: True, Status: Fehler beim Senden von E-Mail: Die dem Benutzer 'rausch' erteilten Berechtigungen reichen zum Ausführen des Vorgangs nicht aus.E-Mails werden nicht erneut gesendet., DeliveryExtension: Report Server Email, Report: Projekt Aufwand, Attempt 0
回避策:subscriptions
ReportServer データベースでテーブルを開き、OwnerId
UserId
をレポート サーバー管理者の userId に置き換えます。その後、サブスクリプションは管理者権限で実行され、機能します。
正しいアクセス許可を設定するためにどこを見たりチェックしたりできるか知っている人はいますか? または、CheckAccess の上書きメソッドにコードを追加する必要がありますか?
コードの一部:
m_RptOperNames.Add(ReportOperation.CreateSubscription,
OperationNames.OperCreateSubscription);
m_RptOperNames.Add(ReportOperation.DeleteSubscription,
OperationNames.OperDeleteSubscription);
m_RptOperNames.Add(ReportOperation.ReadSubscription,
OperationNames.OperReadSubscription);
m_RptOperNames.Add(ReportOperation.UpdateSubscription,
OperationNames.OperUpdateSubscription);
m_RptOperNames.Add(ReportOperation.CreateAnySubscription,
OperationNames.OperCreateAnySubscription);
m_RptOperNames.Add(ReportOperation.DeleteAnySubscription,
OperationNames.OperDeleteAnySubscription);
m_RptOperNames.Add(ReportOperation.ReadAnySubscription,
OperationNames.OperReadAnySubscription);
m_RptOperNames.Add(ReportOperation.UpdateAnySubscription,
OperationNames.OperUpdateAnySubscription);
ここでは、調査のために C# クラス コード全体を移動しました。
実行または電子メール サブスクリプションは表示されませんが、参照コードの一部ではありませんでした。そうなのだろうか?
編集
これを見る: http://msdn.microsoft.com/en-us/library/bb283182.aspx サブスクリプションを電子メールで送信するために必要なアイテムの権利を誰か教えてください。次に、どのアイテムを付与する必要があるかを詳しく見ていきます。
アップデート
私はまだこの問題を抱えていますが、今は少し賢くなっています:)。実際、電子メール配信はMicrosoft.ReportingServices.Library.TimedSubscriptionHandler
、WindowsService Reportserver によって使用される によって処理されます。
レポートへのリンクのみを使用してサブスクリプションをセットアップすると、そのサブスクリプションは CustomSecurity 拡張機能を使用しても機能します。レポートを追加すると、システムはレポートをレンダリングします。レポート サーバーが新しいセッションを作成し、権限が付与されていません。カスタム セキュリティ拡張機能の継承がここで機能するかどうかはまだわかりません。
SSRS / .NET の第一人者がヒントを持っているかもしれませんが、何時間もネットを検索しても解決策は得られませんでした。
回避策: 現時点では、サブスクリプションにトリガーを設定し、OwnerId を管理者 ID に置き換えます。
CREATE TRIGGER Subscription_overwrite_owner
ON dbo.Subscriptions
AFTER INSERT, UPDATE
AS
BEGIN
-- replace the OwnerId with the uid from the admin account
-- so the TimedSubscription runs with correct credentials
UPDATE dbo.Subscriptions SET OwnerID = 'uuid admin from Users table'
END
GO