接続構成の制限

ODP.NETには、Oracleデータベースへの接続を構成および保護する様々な方法があります。この柔軟性には、アプリケーションの接続方法に関する多数のオプションが用意されています。状況によっては、アプリケーションは、使用しない他の接続方法やテストされていない接続方法を制限したり、デプロイ時に認可されていないエントリを制限することがあります。

ODP.NET接続構成の制限により、開発者はアプリケーションの接続方法に対する制限をグローバルに設定できます。たとえば、SaaSアプリケーションでは、MY_WALLET_LOCATIONWALLET_LOCATIONおよびTOKEN_LOCATIONを使用してウォレットおよびトークン・ディレクトリの場所を設定できます。ODP.NETアプリケーションは、データ・ソース接続文字列値(通常は、接続記述子、簡易接続文字列またはTNS別名)のこれらの設定のいずれかを使用して接続できます。

許可されるリストに他のデータ・ソース・パラメータがない場合、接続リクエストは拒否され、エラーがスローされます。エラーでは、「ORA-50122: 次の構成パラメータは設定できません:」の後に、使用した許可されていないパラメータ名リストが続きます。

この機能は、管理対象ODP.NETおよびODP.NET Coreでのみ使用できます。

接続構成では許可リストが使用され、許可される接続オプションの詳細がODP.NETに示されます。アプリケーションではリストを文字列またはファイルとして提供できるため、コードの変更は必要ありません。

接続構成の制限のメソッド

接続構成の制限を使用するには、開発者が次のOracleConfigurationメソッドをコールして制限を設定または設定解除します:

  • EnableConnectionStringAllowedProperties(FileInfo, bool)

    このメソッドは、JSONファイルで許可されるパラメータ・リストのファイル・パスを受け入れます。ファイル名はODPConnectionStringAllowedProperties.jsonにする必要があります。開発者は、ブール引数を設定することで、TNS別名で許可されるパラメータを強制するかどうかを構成できます。

  • EnableConnectionStringAllowedProperties(string, bool)

    このメソッドは、JSON文字列形式の許可されるパラメータ・リストを受け入れます。開発者は、ブール引数を設定することで、TNS別名で許可されるパラメータを強制するかどうかを構成できます。オーバーロードされた両方のメソッドが設定されている場合は、このJSON文字列メソッドによりJSONファイルを使用してオーバーライドされます。

  • DisableConnectionStringAllowedProperties

    このメソッドは、許可されるパラメータの以前のリストの使用を無効にします。接続は構成の制限対象ではなくなります。

データ・ソース: 許可されるパラメータ

パラメータを許可する接続構成JSON形式は次のとおりです:

{
  "DataSource" : {
        "<property_name1>" : true/false, 
        "<property_name2>" : true/false, 
        "<property_name3>" : true/false
    }
}

このサンプルJSONファイルには、禁止できるすべてのプロパティがリストされています。trueに設定された各プロパティは許可されます。falseに設定されたプロパティは制限されます。これらの制限されたプロパティを使用する接続が拒否されることになります。

設定されていないすべてのプロパティは、デフォルトではfalseになります。

重複するプロパティ名がある場合は、最後のプロパティ名が使用されます。

JSON文字列では大/小文字が区別されます。

ODP.NET接続構成JSONサンプル

{
     "DataSource" : {
        "CLIENT_ID" : true,
        "COLOCATION_TAG" : true,
        "CONNECT_TIMEOUT" : true,
        "CONNECTION_ID_PREFIX" : true,
        "ENABLE" : true,
        "EXPIRE_TIME" : true,
        "FAILOVER" : true,
        "HOST" : true,
        "HTTPS_PROXY" : true,
        "HTTPS_PROXY_PORT" : true,
        "IGNORE_ANO_ENCRYPTION_FOR_TCPS" : true,
        "INSTANCE_NAME" : true,
        "LOAD_BALANCE" : true,
        "PASSWORD_AUTH " : true,
        "POOL_BOUNDARY" : true,
        "POOL_CONNECTION_CLASS" : true,
        "POOL_NAME" : true,
        "POOL_PURITY" : true,
        "PORT" : true,
        "PROTOCOL" : true,  
        "RECV_BUF_SIZE" : true,
        "RECV_TIMEOUT" : true,
        "RETRY_COUNT" : true,
        "RETRY_DELAY" : true,
        "SDU" : true,
        "SEND_BUF_SIZE" : true,
        "SERVER" : true,
        "SERVICE_NAME" : true,
        "SHARDING_KEY" : true,
        "SHARDING_KEY_ID" : true,
        "SOURCE_ROUTE" : true,
        "SSL_CERTIFICATE_THUMBPRINT" : true,
        "SSL_SERVER_CERT_DN" : true,
        "SSL_SERVER_DN_MATCH" : true,
        "SSL_VERSION" : true,
        "SUPER_SHARDING_KEY" : true,
        "TRANSPORT_CONNECT_TIMEOUT" : true,
        "BACKUP" : true,
        "TYPE" : true,
        "METHOD" : true,
        "TRANSACTION" : true,
        "RETRIES" : true,
        "DELAY" : true,
        "COMMIT_OUTCOME" = true,
        "MY_WALLET_LOCATION" : false,
        "OCI_COMPARTMENT" : false,
        "OCI_DATABASE" : false,
        "OCI_PROFILE " : false,
        "OCI_TENANCY " : false,
        "TUNNEL_SERVICE_NAME" : false,
        "TENANT_ID" : false,
        "TOKEN_AUTH " : false,
        "TOKEN_LOCATION" : false,
        "WALLET_LOCATION" : false
     }
}

コード・サンプル

using System;
using Oracle.ManagedDataAccess.Client;

class Example
{
  static void Main()
  {
    
   string allowedParameters = “{
   “DataSource” : {
    "CLIENT_ID" : true,
    "COLOCATION_TAG" : true,
    "CONNECT_TIMEOUT" : true,
    "CONNECTION_ID_PREFIX" : true,
    "ENABLE" : true,
    "EXPIRE_TIME" : true,
    "FAILOVER" : true,
    "HOST" : true,
    "HTTPS_PROXY" : true,
    "HTTPS_PROXY_PORT" : true,
    "IGNORE_ANO_ENCRYPTION_FOR_TCPS" : true,
    "INSTANCE_NAME" : true,
    "LOAD_BALANCE" : true,
    "PASSWORD_AUTH " : true,
    "POOL_BOUNDARY" : true,
    "POOL_CONNECTION_CLASS" : true,
    "POOL_NAME" : true,
    "POOL_PURITY" : true,
    "PORT" : true,
    "PROTOCOL" : true,  
    "RECV_BUF_SIZE" : true,
    "RECV_TIMEOUT" : true,
    "RETRY_COUNT" : true,
    "RETRY_DELAY" : true,
    "SDU" : true,
    "SEND_BUF_SIZE" : true,
    "SERVER" : true,
    "SERVICE_NAME" : true,
    "SHARDING_KEY" : true,
    "SHARDING_KEY_ID" : true,
    "SOURCE_ROUTE" : true,
    "SSL_CERTIFICATE_THUMBPRINT" : true,
    "SSL_SERVER_CERT_DN" : true,
    "SSL_SERVER_DN_MATCH" : true,
    "SSL_VERSION" : true,
    "SUPER_SHARDING_KEY" : true,
    "TRANSPORT_CONNECT_TIMEOUT" : true,
    "BACKUP" : true,
    "TYPE" : true,
    "METHOD" : true,
    "TRANSACTION" : true,
    "RETRIES" : true,
    "DELAY" : true,
    "COMMIT_OUTCOME" = true,
    "MY_WALLET_LOCATION" : false,
    "OCI_COMPARTMENT" : false,
    "OCI_DATABASE" : false,
    "OCI_PROFILE " : false,
    "OCI_TENANCY " : false,
    "TUNNEL_SERVICE_NAME" : false,
    "TENANT_ID" : false,
    "TOKEN_AUTH " : false,
    "TOKEN_LOCATION" : false,
    "WALLET_LOCATION" : false
     }
    }”;
    OracleConfiguration.EnableConnectionStringAllowedProperties(allowedParameters, enforceOnAlias: false);
    // Supply the connection string and open a connection
    OracleConnection con = new OracleConnection(<connection string>);
    con.Open();
  }
}

接続構成の使用および検証

プールされた接続の場合、許可されるプロパティの検証は、各プールの最初の接続作成中に1回のみ実行されます。JSON設定を変更しても、ClearPool()またはClearAllPools()のいずれかが呼び出されないかぎり、既存のプール設定は変更されません。次回の接続オープンで新しい設定が使用されます。

新しく作成されたプールでは、最新の更新されたJSON設定が使用されます。

プールされていない接続シナリオでは、指定された最新の許可プロパティ・バージョンを使用して接続リクエストごとに検証が実行されます。