これを行う方法があるはずです。SQL 2008 (r2 ではない) レポート サーバーでレポートを表示しているユーザーの IP アドレス (またはコンピューター名 - ただし、IP の方が取得しやすいと思います) を公開する方法が必要です。これが私がすでに試したことです:
レポート コード ブロックにコードを記述して、次のような IP アドレスを取得します。
Public Function GetClientIP() As String Dim sReturn As String = "" Dim ipHost As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()) For i As int32 = 0 To ipHost.AddressList.Length - 1 If (Not ipHost.AddressList(i) Is Nothing AndAlso ipHost.AddressList(i).ToString().Trim() <> "" AndAlso ipHost.AddressList(i).ToString().Length() <= 15) Then sReturn = ipHost.AddressList(i).ToString() End If Next i Return sReturn End Function
最初、これによりあらゆる種類のセキュリティ許可エラーが発生しましたが、rssrvpolicy.config で Report_Expressions_Default_Permissions の PermissionSet を FullTrust に変更することで回避できました。
<CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust" Name="Report_Expressions_Default_Permissions" Description="This code group grants default permissions for code in report expressions and Code element. "> <IMembershipCondition class="StrongNameMembershipCondition" version="1" PublicKeyBlob="0024000004800000940000000602000000240000525341310004000001000100512C8E872E28569E733BCB123794DAB55111A0570B3B3D4DE3794153DEA5EFB7C3FEA9F2D8236CFF320C4FD0EAD5F677880BF6C181F296C751C5F6E65B04D3834C02F792FEE0FE452915D44AFE74A0C27E0D8E4B8D04EC52A8E281E01FF47E7D694E6C7275A09AFCBFD8CC82705A06B20FD6EF61EBBA6873E29C8C0F2CAEDDA2" /> </CodeGroup>
結局、クライアントではなくサーバーの IP アドレスを返していることがわかりました。それはこれやこれが言うことではありません。
次のようなさまざまなASP.net変数を試しまし
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]
た- 展開されたときにのみ機能し、デバッガーから実行するとエラーがスローされます (これは予想されることだと思います)。
- また、サーバーの IP アドレスのみを返します。
実際、すべてのサーバー変数を取得してレポート画面に表示する簡単なスクリプトを作成しましたが、クライアントの IP アドレスは含まれていません。
Public Function GetServerVariables() AS String Dim sReturn as String = "" for i as int32 = 0 to System.Web.HttpContext.Current.Request.ServerVariables.Count -1 sReturn &=System.Web.HttpContext.Current.Request.ServerVariables.Keys(i).ToString & ": " & System.Web.HttpContext.Current.Request.ServerVariables.Item(i).ToString() & " - " next i Return sReturn End Function
上記の GetClientIP() 関数と基本的にまったく同じコードを実行する vb.NET でカスタム アセンブリを作成しようとしましたが、数日間試行した後、そのアセンブリでアクセス許可エラーを解決できませんでした。ほぼ同時に、ステップ (1) のレポート コードが機能し、それがサーバーの IP アドレスを返していたので、カスタム アセンブリが同じものを返すと想定したため、最終的にこれをあきらめました。
では、ここまでです。説明が長くなって申し訳ありませんが、できるだけ詳しく説明したいと思います。また、ユーザーの IP アドレスが必要な理由を知りたい方のために説明すると、これは実際には別の複雑な話であり、誰かが本当に知りたい場合は、別の投稿で説明します。
要するに、ブラウザでレポートを実行しているコンピュータの IP アドレスまたはコンピュータ名が必要です。ユーザー名やその他の詳細は、何らかの方法で IP アドレスを検索するために使用できない限り、十分ではありません。