バージョン

Medium Trust の下で作業する場合の制限とは?

中程度の信頼によって課せられたより制限的なセキュリティ サンドボックスは、完全な信頼環境で実行している時に問題なく機能する複数のオペレーションを省略します。以下は中程度の信頼環境で作業する時の既知の制限のリストです。

OLE DB パーミッションはデフォルトで付与されない

OleDBPermission の制限は、ADO.NET の OLE DB データ プロバイダー サポートの使用を可能にする ASP.NET アプリケーションに影響を及ぼし、full-trust 環境から部分信頼環境に移動されます。

WebScheduleOleDbProvider™ コントロールは間接的に OleDbPermission を必要とします。これらの Microsoft .NET Framework ファシリティから OLE DB データ ソース (たとえば、Microsoft® Access™ データベース ファイル) と通信するからです。その結果、サイトの管理者が制限なしの OleDbPermission をアプリケーションに与えない限り、部分信頼環境では機能しません。

サイトの管理者は、web_mediumtrust.config ファイルを編集することですべての medium-trust アプリケーションに OleDbPermission を追加することができます。このファイルは、.NET Framework 2.0 の以下のパスに置かれています。

%windir%\Microsoft.NET\Framework\v2.0.50727\Config

制限なしの OleDbPermission を付与するには、web_mediumtrust.config ファイルに以下の引用の強調表示された XML を追加する必要があります。

注: 使用できる場合、OLE DB よりセキュアでスケーラブルであるため、部分信頼環境で SqlClient データ プロバイダーの使用を検討してください。

<SecurityClasses>
        ...
        <SecurityClass
          Name="OleDbPermission"
          Description="System.Data.OleDb.OleDbPermission, System.Data,
            Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</SecurityClasses>
    ...
        <IPermission
          class="WebPermission"
          version="1">
          <ConnectAccess>
                <URI uri="$OriginHost$"/>
          </ConnectAccess>
        <IPermission>
        <IPermission class="OleDbPermission"
          version="1">
          Unrestricted="true" />

          </PermissionSet>
        </NamedPermissionSets>
        ...

ファイル I/O パーミッションはデフォルトで Web アプリケーションのディレクトリに制限される

ランタイムに Web アプリケーションが動作するすべての外部ファイルは、Web アプリケーションのディレクトリに制限されます。

Ultimate UI for ASP.NET コントロールのルック アンド フィールをリストアするためにランタイムに動的にプリセットをユーザーのカスタム プレファレンスにロードするアプリケーションは、Web アプリケーションのディレクトリにプリセット ファイルを配備する必要があります。

ご使用のアプリケーションがカスタムの DownloadMode で WebGridExcelExporter™ コントロールを使用してテンポラリ ファイルを生成する場合、Web アプリケーション ディレクトリにそれらのファイルを書き込みます。

可能な場合、部分信頼で動作している Web アプリケーションで File I/O の代わりに IsolatedStorage を使用することを推奨します。

リフレクションはパブリック メンバーに対してのみ許可される

一部のプロパティは、ユーザーがアプリケーションで .NET コンポーネント、プロパティ、またはフィールドを指定することができます。たとえば、WebScheduleSqlClientProvider™ コンポーネントによって、デザインタイムに SqlConnection コンポーネントの ConnectionID を指定することができます。ランタイムには、そのようなプロパティは、名前が付けられたコンポーネント、プロパティ、またはフィールドと接続するためにレイトバインディング (リフレクション) を使用します。中程度の信頼は、パブリック メンバーに遅延バインディングのみを許可します。

これらの種類のプロパティを指定する .NET コンポーネント、プロパティ、またはフィールド ("members") のアクセス修飾子が "protected"、"private"、"internal"、または "family" キーワードである場合、レイトバイディングは接続に失敗します。部分信頼で動作している場合、これらのメンバー パブリックをマークする、または直接プロパティ値を指定する必要があります。

たとえば、WebScheduleSqlClientProvider コンポーネントを SqlConnection に接続する選択には、以下のいずれかの方法があります。

  • デザインタイムでは、sqlConnection1 が "public" アクセス修飾子でマークされている場合、ConnectionID プロパティを SqlConnection コンポーネントの名前に設定します(たとえば、sqlConnection1)。

  • ランタイムでは、Web Form の Init イベント中(InitializeComponents メソッドが SqlConnection コンポーネントを初期化後)、SqlConnection コンポーネントを WebScheduleSqlClientProvider コンポーネントの Connection プロパティに直接指定することができます。

Visual Basic の場合:

Me.WebScheduleSqlClientProvider1.Connection = Me.sqlConnection1

C# の場合:

this.WebScheduleSqlClientProvider1.Connection = this.sqlConnection1;