次の方法で共有


コード アクセス セキュリティと ADO.NET

Windows セキュリティでは、ユーザーのロールに基づいてリソースを保護できます。たとえば、管理者には無制限のアクセス許可が与えられているのに対して、Guest には非常に制限されたアクセス許可が与えられています。.NET Framework は、アプリケーションの保護の強化に役立つ、コード アクセス セキュリティというセキュリティ機構を備えています。コード アクセス セキュリティを使用すると、アセンブリの Zone によってコードの発生元が識別され、コード アクセス セキュリティ ポリシーでそのゾーンに対して指定されているアクセス許可が適用されます。たとえば、マシン上にあるコードは、MyComputer ゾーンにあると識別されます。ローカル イントラネット上の別のマシンからダウンロードされたコードは、LocalIntranet ゾーンにあると識別されます。ゾーンごとに異なるアクセス許可セットを適用することにより、LocalIntranet ゾーンにある外部コードに対するセキュリティは厳しくし、MyComputer ゾーンのセキュリティは緩やかにするというようなことができます。

特定のゾーンに対する制限は、アクセス許可セットを使用して指定します。.NET Framework には既定のアクセス許可セットが用意されていますが、カスタム アクセス許可セットを作成して、特定のゾーンに指定することもできます。

アクセス許可セットは、通常、完全信頼、部分信頼、および信頼されていないの 3 つのカテゴリに分けられます。完全信頼では、コードに何の制限も設定されません。既定では、ローカル コンピュータと、厳密な名前付きのソースに使用されます。アクセス許可セットを持っていないと識別されたゾーンは、信頼されていないと見なされ、アクセス許可を必要としない機能だけを使用できます。部分信頼アクセス許可セットには、特定のゾーンに対する適切なアクセス許可と制限の組み合わせが含まれます。

.NET Framework Data Provider for OLE DB、.NET Framework Data Provider for ODBC、および .NET Framework Data Provider for Oracle は、FullTrust アクセス許可を持つゾーンで実行する場合にだけ、適切と見なされます。FullTrust より低いレベルのアクセス許可のゾーンで OLE DB または ODBC プロバイダを使おうとすると、SecurityException がスローされます。OLE DB、ODBC、および Oracle のデータ プロバイダは、リンク時にもコード実行時にも、FullTrust アクセス許可を要求します。.NET Framework Version 1.0 では、OLE DB、ODBC、および Oracle のデータ プロバイダは、リンク時にだけ、FullTrust アクセス許可を要求しました。

メモ   .NET Framework Version 1.0 での .NET Framework Data Provider for SQL Server を実行するには、FullTrust アクセス許可が必要です。FullTrust より低いレベルのアクセス許可のゾーンで SQL Server プロバイダを使おうとすると、SecurityException がスローされます。

.NET Framework Data Provider for SQL Server は、FullTrust アクセス許可セットを持つゾーンと部分信頼アクセス許可セットを持つゾーンのどちらでも実行できます。部分信頼のアプリケーションは、少なくとも、Execution アクセス許可と SQL クライアントのアクセス許可が必要です。部分信頼ゾーンの場合には、SqlClient アクセス許可属性を使用すれば、SQL Server プロバイダが使用できる機能をさらに制限できます。

メモ   .NET Framework Data Provider for SQL Server では、SQL デバッグを有効にして SqlConnection を開くためには、セキュリティ アクセス許可で "アンマネージ アセンブリへの呼び出しを有効にする" をオンにする (SecurityPermissionSecurityPermissionFlagUnmanagedCode にする) 必要があります。

特定のゾーンに対して SqlClient アクセス許可を設定するには、管理者がカスタム アクセス許可セットを作成して、目的のゾーンに指定する必要があります。LocalIntranet などの既定のアクセス許可セットは変更できません。たとえば、ZoneLocalIntranet であるコードに SqlClient アクセス許可を設定するには、管理者は LocalIntranet のアクセス許可セットをコピーして名前を MyLocalIntranet に変更し、SqlClient アクセス許可を追加します。次に、コード アクセス セキュリティ ポリシー ツール (Caspol.exe) を使用して MyLocalIntranet アクセス許可セットをインポートし、LocalIntranet_Zone のアクセス許可セットを MyLocalIntranet に設定します。

使用可能なアクセス許可属性プロパティとその使い方を次の表に示します。

SqlClientPermissionAttribute
プロパティ
説明
AllowBlankPassword 接続文字列で空白のパスワードの使用を許可または禁止するために使用します。有効な値は、空白のパスワードの使用を許可する true と、空白のパスワードの使用を禁止する false です。
ConnectionString 使用できる接続文字列を指定します。複数の接続文字列を指定できます。KeyRestrictions を使用して、追加の接続文字列制限を指定することもできます。

接続文字列には、ユーザー ID やパスワードを含めないことをお勧めします。

このリリースでは、.NET Framework 構成ツールを使用して接続文字列制限を変更することはできません。

KeyRestrictions 許可または禁止する接続文字列パラメータを指定します。接続文字列パラメータは、<parameter name>= の形式で指定します。セミコロン (;) で区切って、複数のパラメータを指定できます。KeyRestrictionBehavior プロパティを使用すると、列挙したパラメータを、それらだけが許可されるように指定することも、それらは許可されないように指定することもできます。

KeyRestrictions が指定されておらず、KeyRestrictionBehavior プロパティが AllowOnly に設定されている場合は、どの追加接続文字列パラメータも使用できません。

KeyRestrictions が指定されておらず、KeyRestrictionBehavior プロパティが PreventUsage に設定されている場合は、どの追加接続文字列パラメータも使用できません。

KeyRestrictionBehavior KeyRestrictions プロパティで指定されたすべての接続文字列パラメータが、許可される追加の接続文字列パラメータであるか (AllowOnly)、禁止される追加の接続文字列パラメータであるか (PreventUsage) を指定します。既定値は AllowOnly です。

たとえば、次のプロパティ設定では、接続文字列 Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind; だけが使用できます。

<add ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />

上の接続文字列の使用を許可し、EncryptPacket Size 接続文字列オプションの使用も許可する一方で、それ以外の接続文字列オプションの使用を禁止する場合は、次のように指定します。

<add ConnectionString=" Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
KeyRestrictions="Encrypt=;Packet Size=;"
KeyRestrictionBehavior="AllowOnly" />

上の接続文字列の使用を許可し、User IdPassword、および Persist Security Info 以外のすべての接続パラメータの使用を許可する場合は、次のように指定します。

<add ConnectionString=" Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
KeyRestrictions="User Id=;Password=;Persist Security Info=;"
KeyRestrictionBehavior="PreventUsage" />

次のアクセス許可では、統合セキュリティを使用して、localhost と MySqlServer の両方への接続を許可します。接続文字列には、Initial CatalogConnection TimeoutEncryptPacket Size の各パラメータも含めることができます。その他の接続文字列パラメータは、すべて制限されます。

<add ConnectionString="Data Source=localhost;Integrated Security=SSPI;"
     KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;" 
     KeyRestrictionBehavior="AllowOnly" />
<add ConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"
     KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;" 
     KeyRestrictionBehavior="AllowOnly" />

サンプル アクセス許可セット

部分信頼のシナリオでの、.NET Framework Data Provider for SQL Server 用アクセス許可セットの例を次に示します。カスタム アクセス許可セットを作成する方法の詳細については、「Caspol.exe によるアクセス許可セットの構成」を参照してください。

<PermissionSet class="System.Security.NamedPermissionSet"
               version="1"
               Name="MyLocalIntranet"
               Description="Custom permission set given to applications on the local intranet">

   <IPermission class="System.Data.SqlClient.SqlClientPermission, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                version="1"
                AllowBlankPassword="False">
      <add ConnectionString="Data Source=localhost;Integrated Security=SSPI;"
           KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;" 
           KeyRestrictionBehavior="AllowOnly" />
   </IPermission>

</PermissionSet>

参照

安全な ADO.NET コードの作成 | コード アクセス セキュリティ | .NET Framework 構成ツール (Mscorcfg.msc)