7 PL/SQLパッケージおよびタイプでのファイングレイン・アクセスの管理
Oracle Databaseにはファイングレイン・アクセスのためのPL/SQLパッケージとタイプが用意されており、これにより外部ネットワーク・サービスやウォレットへのアクセスを制御できます。
- PL/SQLパッケージおよびタイプでのファイングレイン・アクセスの管理について
PL/SQLパッケージのセットと1つの型を使用して、外部ネットワーク・サービスおよびウォレットに対するユーザー・アクセスを構成できます。 - 外部ネットワーク・サービスに対するファイングレイン・アクセス・コントロールについて
Oracle Application Securityアクセス制御リスト(ACL)で、外部ネットワーク・サービスに対するファイングレイン・アクセス・コントロールを実装できます。 - Oracleウォレットへのアクセス制御について
リモートWebサーバーによって保護されているWebページにアクセスするときに、ユーザーはOracleウォレットに格納されているクライアント資格証明とパスワードを使用して認証を受けることができます。 - 外部ネットワーク・サービスを使用するパッケージに依存しているアップグレードされたアプリケーション
アップグレードされたアプリケーションでORA-24247
ネットワーク・アクセス・エラーが発生することがあります。 - 外部ネットワーク・サービスのアクセス制御の構成
DBMS_NETWORK_ACL
パッケージは、外部ネットワーク・サービスのアクセス制御を構成します。 - Oracleウォレットへのアクセス制御の構成
Oracleウォレットに対するファイングレイン・アクセス・コントロールにより、パスワードや証明書を必要とするネットワーク・サービスへのアクセスをユーザーに提供できます。 - 外部ネットワーク・サービスのアクセス制御の構成の例
1つのロールとネットワーク接続など、様々な状況に適したアクセス制御を構成できます。 - ネットワーク・ホスト・コンピュータのグループの指定
ネットワーク・ホスト・コンピュータのグループを指定するには、ワイルドカードを使用できます。 - 複数のアクセス制御リスト割当てでのホスト・コンピュータの優先順位
ドメインに割り当てられているアクセス制御リストの優先順位は、サブ・ドメインに割り当てられているアクセス制御リストの優先順位よりも低くなります。 - ポート範囲指定によるアクセス制御リスト割当てでのホストの優先順位
アクセス制御リスト内のホストの優先順位は、ポート範囲の使用の影響を受けます。 - ネットワーク・ホストへのユーザー・アクセスに影響を与える権限割当てのチェック
管理者とユーザーは、どちらもネットワーク接続およびドメイン権限をチェックできます。 - Javaデバッグ・ワイヤ・プロトコル操作のネットワーク・アクセスの構成
Java PL/SQLプロシージャをデバッグするには、jdwp
ACL権限を付与されていることが必要です。 - ユーザー・アクセス用に構成されたアクセス制御リストのデータ・ディクショナリ・ビュー
Oracle Databaseでは、既存のアクセス制御リストに関する情報の検索に使用できるデータ・ディクショナリ・ビューが提供されています。
親トピック: ユーザー認証および認可の管理
7.1 PL/SQLパッケージおよびタイプでのファイングレイン・アクセスの管理について
PL/SQLパッケージのセットと1つの型を使用して、外部ネットワーク・サービスおよびウォレットに対するユーザー・アクセスを構成できます。
パッケージはUTL_TCP
、UTL_SMTP
、UTL_MAIL
、UTL_HTTP
、UTL_INADDR
、DBMS_LDAP
のPL/SQLパッケージ、型はHttpUriType
です。
次の使用方法が可能です。
-
データベースから外部ネットワーク・サービスへのアクセスが必要なユーザーやロールに、ファイングレイン・アクセス・コントロールを構成します。これによって、特定のユーザー・グループは、付与されている権限に基づいて1つ以上のホスト・コンピュータに接続できます。通常、この機能は、特定のホスト・アドレスで実行されるアプリケーションへのアクセスを制御するために使用します。
-
パスワードまたはクライアント証明書認証を必要とするHTTPリクエストを処理するために、Oracleウォレットにファイングレイン・アクセス・コントロールを構成します。この機能により、Oracleウォレットに格納されているパスワードとクライアント証明書を使用するユーザーに、保護されている外部HTTPリソースに
UTL_HTTP
パッケージを介してアクセスする権限を付与できます。たとえば、アプリケーションで資格証明をハードコードするかわりに、ウォレットに格納されている資格証明を使用するようにアプリケーションを構成できます。
7.2 外部ネットワーク・サービスに対するファイングレイン・アクセス・コントロールについて
Oracle Application Securityアクセス制御リスト(ACL)で、外部ネットワーク・サービスに対するファイングレイン・アクセス・コントロールを実装できます。
このマニュアルでは、DBMS_NETWORK_ACL_ADMIN
PL/SQLパッケージを使用してデータベース・ユーザーおよびロールのアクセス制御を構成する方法について説明します。
この機能を使用することで、データベース・ユーザーがPL/SQLネットワーク・ユーティリティ・パッケージUTL_TCP
、UTL_SMTP
、UTL_MAIL
、UTL_HTTP
、UTL_INADDR
、PL/SQLパッケージDBMS_LDAP
とDBMS_DEBUG_JDWP
およびHttpUriType
型を使用して接続できる外部ネットワーク・ホストが制限されるため、ネットワーク接続のセキュリティが強化されます。この機能を使用しない場合、デフォルトでは、PL/SQLユーティリティ・パッケージは、PUBLIC
ユーザーに付与されるEXECUTE
権限付きで作成されるため、データベースへのアクセス権を獲得した侵入者が故意にネットワークを攻撃する可能性があります。これらのPL/SQLネットワーク・ユーティリティ・パッケージおよびDBMS_NETWORK_ACL_ADMIN
とDBMS_NETWORK_ACL_UTILITY
パッケージは、IPバージョン4(IPv4)アドレスとIPバージョン6(IPv6)アドレスの両方をサポートしています。このマニュアルでは、両方のバージョンに対してアクセス制御を管理する方法について説明します。Oracle DatabaseでのIPv4およびIPv6表記法の詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
関連項目:
電子メール・アラート用に外部ネットワーク・サービスへのアクセス制御を構成する例は、例: ファイングレイン監査ポリシーへの電子メール・アラートの追加を参照してください
7.3 Oracleウォレットへのアクセス制御について
リモートWebサーバーによって保護されているWebページにアクセスするときに、ユーザーはOracleウォレットに格納されているクライアント資格証明とパスワードを使用して認証を受けることができます。
Oracleウォレットでは、ユーザーのパスワードとクライアント証明書を安全に格納できます。
ウォレットに対するアクセス制御を構成するには、次のコンポーネントが必要です。
-
Oracleウォレット。Oracleウォレットは、Oracle Databaseの
mkstore
ユーティリティまたはOracle Wallet Managerを使用して作成できます。HTTPリクエストでは、外部パスワード・ストアまたはウォレット内のクライアント証明書を使用してユーザーが認証されます。 -
ユーザーにウォレットの使用権限を付与するアクセス制御リスト。アクセス制御リストを構成するには、
DBMS_NETWORK_ACL_ADMIN
PL/SQLパッケージを使用します。
Oracleウォレットを使用すると、保護されているWebページへのアクセスに必要なパスワードとクライアント証明書を安全に格納できます。
関連トピック
7.4 外部ネットワーク・サービスを使用するパッケージに依存しているアップグレードされたアプリケーション
アップグレードされたアプリケーションでORA-24247
ネットワーク・アクセス・エラーが発生することがあります。
Oracle Database 11gリリース1 (11.1)より前のリリースからアップグレードしているときに、アプリケーションがPL/SQLネットワーク・ユーティリティ・パッケージ(UTL_TCP
、UTL_SMTP
、UTL_MAIL
、UTL_HTTP
、UTL_INADDR
およびDBMS_LDAP
)またはHttpUriType
型に依存している場合は、そのアプリケーションの実行を試みたときに、ORA-24247
エラーが発生する可能性があります。
エラー・メッセージは次のとおりです。
ORA-24247: network access denied by access control list (ACL)
その場合は、この章に記載されている手順を使用してアプリケーションのネットワーク・アクセスを再構成してください。
関連項目:
PL/SQLネットワーク・ユーティリティ・パッケージに依存しているアプリケーションの互換性に関する問題については、『Oracle Databaseアップグレード・ガイド』を参照してください。
7.5 外部ネットワーク・サービスのアクセス制御の構成
DBMS_NETWORK_ACL
パッケージは、外部ネットワーク・サービスのアクセス制御を構成します。
- 外部ネットワーク・サービスのアクセス制御の構成の構文
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
プロシージャを使用して、アクセス制御権限をユーザーに付与できます。 - リスナーによる外部ネットワーク・サービスのアクセス制御の認識の有効化
外部ネットワーク・サービスのアクセス制御を認識するようにリスナーが構成されていない場合、TNS-01166: Listener rejected registration or update of service ACL
エラーが発生する可能性があります。 - 例: 外部ネットワーク・サービスのアクセス制御の構成
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
プロシージャで、外部ネットワーク・サービスのアクセス制御を構成できます。 - 外部ネットワーク・サービスのアクセス制御権限の取消し
外部ネットワーク・サービスのアクセス制御権限を削除できます。 - 例: 外部ネットワーク・サービス権限の取消し
DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE
プロシージャを使用して、外部ネットワーク・サービス権限を取り消すことができます。
7.5.1 外部ネットワーク・サービスのアクセス制御の構成の構文
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
プロシージャを使用して、アクセス制御権限をユーザーに付与できます。
このプロシージャは、指定された権限を持つアクセス制御エントリ(ACE)を指定されたホストのACLに追加し、存在しない場合はACLを作成します。結果の構成は、作成したユーザーのスキーマでなくSYS
スキーマにあります。
構文は次のとおりです。
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE ( host => 'host_name', lower_port => null|port_number, upper_port => null|port_number, ace => ace_definition); END;
詳細は、次のとおりです。
-
host
: ホストの名前を入力します。ホスト名またはホストのIPアドレスのいずれかです。ワイルドカードを使用して、ドメインまたはIPサブネットを指定できます。(ドメイン名でワイルドカードを使用する場合の優先順位は、複数のアクセス制御リスト割当てでのホスト・コンピュータの優先順位を参照してください。)ホストまたはドメイン名は大/小文字が区別されません。次に例を示します。host => 'www.example.com', host => '*example.com',
-
lower_port
:(オプション)TCP接続に対するポート範囲の下限を入力します。connect
権限にのみ、この設定を使用します。resolve
権限には省略します。デフォルトはnull
で、ポート制限がない(つまり、すべてのポートにACLが適用される)ことを意味します。ポート番号の範囲は1から65535です。たとえば:
lower_port => 80,
-
upper_port
:(オプション)TCP接続に対するポート範囲の上限を入力します。connect
権限にのみ、この設定を使用します。resolve
権限には省略します。デフォルトはnull
で、ポート制限がない(つまり、すべてのポートにACLが適用される)ことを意味します。ポート番号の範囲は1から65535です。たとえば:
upper_port => 3999);
lower_port
に値を入力してupper_port
をnull
のままに(または省略)すると、upper_port
の設定は、lower_port
と同じ設定とみなされます。たとえば、lower_port
を80
に設定し、upper_port
を省略すると、このupper_port
の設定は80
とみなされます。アクセス制御リスト割当てにポート範囲が指定されている場合、アクセス制御リストの
resolve
権限は機能しません。 -
ace
: 次の形式のXS$ACE_TYPE
定数を使用して、ACEを定義します。ace => xs$ace_type(privilege_list => xs$name_list('privilege'), principal_name => 'user_or_role', principal_type => xs$ace_type_user));
詳細は、次のとおりです。
-
privilege_list
: 大/小文字を区別しない1つ以上の次の権限を入力します。一重引用符で各権限を囲み、カンマ('http', 'http_proxy'
など)で区切ります。アクセス制御を強化するために、ユーザーが
UTL_HTTP
、HttpUriType
、UTL_SMTP
またはUTL_MAIL
のみを使用する場合、connect
権限のかわりにhttp
、http_proxy
またはsmtp
権限のみ付与します。-
http
:UTL_HTTP
パッケージおよびHttpUriType
型を通じてホストへのHTTPリクエストを作成します-
http_proxy
:UTL_HTTP
パッケージおよびHttpUriType
型を通じてプロキシを介したHTTPリクエストを作成します。ユーザーがプロキシを介してHTTPリクエストを作成する場合、http
権限と組み合せてhttp_proxy
を含む必要があります。-
smtp
:UTL_SMTP
およびUTL_MAIL
パッケージを通じて、SMTPをホストに送信します-
resolve
:UTL_INADDR
パッケージを通じて、ネットワーク・ホスト名またはIPアドレスを解決します-
connect
:UTL_TCP
、UTL_SMTP
、UTL_MAIL
、UTL_HTTP
およびDBMS_LDAP
パッケージまたはHttpUriType
型を通じて、ホストのネットワーク・サービスに接続するユーザー権限を付与します-
jdwp
: JavaまたはPL/SQLストアド・プロシージャのJavaデバッグ・ワイヤ・プロトコル・デバッグ操作に使用されます。詳細は、Javaデバッグ・ワイヤ・プロトコル操作のネットワーク・アクセスの構成を参照してください。 -
principal_name
: データベース・ユーザー名またはロールを入力します。二重引用符(たとえば、'"ACCT_MGR'"
など)で入力しないかぎり、この値は大/小文字を区別しません。 -
principal_type
: データベース・ユーザーまたはロールのXS_ACL.PTYPE_DB
を入力します。principal_type
値のデフォルトがOracle Database Real Application Securityアプリケーション・ユーザーの指定に使用されるPTYPE_XS
であるため、PTYPE_DB
を指定する必要があります。
-
関連項目:
ace
パラメータ設定に含むことができる追加のXS$ACE_TYPE
パラメータgranted
、inverted
、start_date
およびend_date
の詳細は、『Oracle Database Real Application Security管理者および開発者ガイド』を参照してください。親トピック: 外部ネットワーク・サービスのアクセス制御の構成
7.5.2 リスナーによる外部ネットワーク・サービスのアクセス制御の認識の有効化
外部ネットワーク・サービスのアクセス制御を認識するようにリスナーが構成されていない場合、TNS-01166: Listener rejected registration or update of service ACL
エラーが発生する可能性があります。
親トピック: 外部ネットワーク・サービスのアクセス制御の構成
7.5.3 例: 外部ネットワーク・サービスのアクセス制御の構成
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
プロシージャで、外部ネットワーク・サービスのアクセス制御を構成できます。
例7-1は、ホストwww.example.com
に作成されるACLのacct_mgr
データベース・ロールへのhttp
およびsmtp
権限の付与方法を示しています。
例7-1 データベース・ロールの外部ネットワーク・サービスへの権限の付与
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.example.com', ace => xs$ace_type(privilege_list => xs$name_list('http', 'smtp'), principal_name => 'acct_mgr', principal_type => xs_acl.ptype_db)); END; /
親トピック: 外部ネットワーク・サービスのアクセス制御の構成
7.5.4 外部ネットワーク・サービスのアクセス制御権限の取消し
外部ネットワーク・サービスのアクセス制御権限を削除できます。
-
外部ネットワーク・サービスのアクセス制御権限を取り消すには、
DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE
プロシージャを実行します。
関連項目:
DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: 外部ネットワーク・サービスのアクセス制御の構成
7.5.5 例: 外部ネットワーク・サービス権限の取消し
DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE
プロシージャを使用して、外部ネットワーク・サービス権限を取り消すことができます。
例7-2は、外部ネットワーク権限の取消し方法を示しています。
例7-2 外部ネットワーク・サービス権限の取消し
BEGIN DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE ( host => 'www.example.com', lower_port => 80, upper_port => upper_port => 3999, ace => xs$ace_type(privilege_list => xs$name_list('http', 'smtp'), principal_name => 'acct_mgr', principal_type => xs_acl.ptype_db), remove_empty_acl => TRUE); END; /
ここで、remove_empty_acl
のTRUE
設定は、ACEの削除時に空になる場合にACLを削除します。
親トピック: 外部ネットワーク・サービスのアクセス制御の構成
7.6 Oracleウォレットへのアクセス制御の構成
Oracleウォレットに対するファイングレイン・アクセス・コントロールにより、パスワードや証明書を必要とするネットワーク・サービスへのアクセスをユーザーに提供できます。
- Oracleウォレットへのアクセス制御の構成について
アクセス制御を構成して、パスワードおよびクライアント証明書にアクセス権を付与できます。 - ステップ1: Oracleウォレットの作成
Oracleウォレットでは標準およびPKCS11の両タイプのウォレットを使用できるほか、自動ログイン・ウォレットにすることもできます。 - ステップ2: Oracleウォレットのアクセス制御権限の構成
ウォレットを作成した後、ウォレットのアクセス制御権限を構成できます。 - ステップ3: パスワードとクライアント証明書を使用するHTTPリクエストの作成
UTL_HTTP
パッケージでウォレット情報を格納したHTTPリクエスト・オブジェクトを作成し、クライアント証明書またはパスワードを使用して認証できます。 - Oracleウォレットのアクセス制御権限の取消し
Oracleウォレットのアクセス制御権限を取り消すことができます。
7.6.1 Oracleウォレットへのアクセス制御の構成について
アクセス制御を構成して、パスワードおよびクライアント証明書にアクセス権を付与できます。
これらのパスワードとクライアント証明書はOracleウォレットに格納されます。アクセス制御を構成すると、PL/SQLネットワーク・ユーティリティ・パッケージを使用するときに外部ネットワーク・サービスに対してユーザーが自身を証明できるようになります。
これにより、ユーザーは、パスワードまたは証明書IDが必要なネットワーク・サービスへのアクセスを取得できます。
親トピック: Oracleウォレットへのアクセス制御の構成
7.6.2 ステップ1: Oracleウォレットの作成
Oracleウォレットでは標準およびPKCS11の両タイプのウォレットを使用できるほか、自動ログイン・ウォレットにすることもできます。
-
ウォレットを作成するには、
mkstore
コマンドライン・ユーティリティまたはOracle Wallet Managerユーザー・インタフェースを使用します。ウォレットにパスワードを格納するには、
mkstore
ユーティリティを使用する必要があります。 -
ウォレットがファイルにエクスポートされていることを確認します。
-
ウォレットを作成したディレクトリをノートにとっておきます。このディレクトリ・パスは、このセクションの手順の終了後に必要になります。
7.6.3 ステップ2: Oracleウォレットのアクセス制御権限の構成
ウォレットを作成した後、ウォレットのアクセス制御権限を構成できます。
-
DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE
プロシージャを使用して、ウォレット・アクセス制御権限を構成します。
DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE
プロシージャの構文は次のとおりです。
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE ( wallet_path => 'directory_path_to_wallet', ace => xs$ace_type(privilege_list => xs$name_list('privilege'), principal_name => 'user_or_role', principal_type => xs$ace_type_user)); END;
詳細は、次のとおりです。
-
wallet_path
: ステップ1: Oracleウォレットの作成で作成したウォレットを含むディレクトリへのパスを入力します。ウォレットのパスを指定する際は、絶対パスを使用し、ディレクトリ・パスの前にfile:
を入れる必要があります。$ORACLE_HOME
などの環境変数を使用したり、file:
の後およびパス名の前にスペースを挿入することはできません。たとえば:wallet_path => 'file:/oracle/wallets/hr_wallet',
-
ace
:XS$ACE_TYPE
定数を使用して、ACLを定義します。たとえば:ace => xs$ace_type(privilege_list => xs$name_list(privilege), principal_name => 'hr_clerk', principal_type => xs_acl.ptype_db);
ここでは、
xs$ace_type
を使用してウォレット権限を入力する場合、privilege
が次のいずれかである必要があります(これらの権限名のアンダースコアの使用に注意してください)。-
use_client_certificates
-
use_passwords
これらのパラメータの詳細は、外部ネットワーク・サービスのアクセス制御の構成の構文の
ace
パラメータの説明を参照してください。ウォレットには、use_client_certificates
またはuse_passwords
権限を指定する必要があります。 -
関連項目:
ace
パラメータ設定に含むことができる追加のXS$ACE_TYPE
パラメータgranted
、inverted
、start_date
およびend_date
の詳細は、『Oracle Database Real Application Security管理者および開発者ガイド』を参照してください。
親トピック: Oracleウォレットへのアクセス制御の構成
7.6.4 ステップ3: パスワードとクライアント証明書を使用するHTTPリクエストの作成
UTL_HTTP
パッケージでウォレット情報を格納したHTTPリクエスト・オブジェクトを作成し、クライアント証明書またはパスワードを使用して認証できます。
- パスワードとクライアント証明書を使用するHTTPSリクエストの作成
UTL_HTTP
パッケージは、SQLとPL/SQLからHypertext Transfer Protocol (HTTP)のコールアウトを行います。 - 他のアプリケーションとセッションを共有している場合に、リクエスト・コンテキストを使用してウォレットを保留
他のアプリケーションとデータベース・セッションを共有している場合は、リクエスト・コンテキストを使用してウォレットを保留にする必要があります。 - 認証にクライアント証明書のみを使用
ユーザーに対してACLウォレットで適切な権限が付与されているかぎり、ユーザーの認証にクライアント証明書のみを使用できます。 - 認証にパスワードを使用
要求したURLが保護されていてユーザー名とパスワードの認証を要求される場合は、ウォレットからユーザー名とパスワードを設定して認証します。
親トピック: Oracleウォレットへのアクセス制御の構成
7.6.4.1 パスワードとクライアント証明書を使用するHTTPリクエストの作成
UTL_HTTP
パッケージは、SQLとPL/SQLからHypertext Transfer Protocol (HTTP)のコールアウトを行います。
-
UTL_HTTP
PL/SQLパッケージを使用して、HTTPリクエストとそのレスポンスで個別に使用されるリクエスト・コンテキスト・オブジェクトを作成します。
たとえば:
DECLARE req_context UTL_HTTP.REQUEST_CONTEXT_KEY; req UTL_HTTP.REQ; BEGIN req_context := UTL_HTTP.CREATE_REQUEST_CONTEXT ( wallet_path => 'file:path_to_directory_containing_wallet', wallet_password => 'wallet_password'|NULL); req := UTL_HTTP.BEGIN_REQUEST( url => 'URL_to_application', request_context => 'request_context'|NULL); ... END;
詳細は、次のとおりです。
-
req_context
:UTL_HTTP.CREATE_REQUEST_CONTEXT_KEY
データ型を使用して、リクエスト・コンテキスト・オブジェクトを作成します。このオブジェクトには、Oracle Databaseがリクエスト・コンテキストの識別に使用する、ランダムに生成された数値キーが格納されています。UTL_HTTP.CREATE_REQUEST_CONTEXT
ファンクションは、リクエスト・コンテキスト自体を作成します。 -
req
:UTL_HTTP.REQ
データ型を使用して、HTTPリクエストを開始するためのオブジェクトを作成します。このオブジェクトは後で、パスワードで保護されたWebページにアクセスするために、ウォレットからユーザー名とパスワードを設定する際に参照します。 -
wallet_path
: ウォレットが格納されているディレクトリのパスを入力します。このパスは、前のセクションのステップ2: Oracleウォレットのアクセス制御権限の構成でアクセス制御リストを作成したときに指定したパスと同じであることを確認してください。ディレクトリ・パスの前にfile:
を含める必要があります。$ORACLE_HOME
などの環境変数を使用しないでください。たとえば:
wallet_path => 'file:/oracle/wallets/hr_wallet',
-
wallet_password
: ウォレットを開くためのパスワードを入力します。デフォルトはNULL
で、自動ログイン・ウォレットに使用します。たとえば:wallet_password => 'wallet_password');
-
url
: ウォレットを使用するアプリケーションのURLを入力します。たとえば:
url => 'www.hr_access.example.com',
-
request_context
: このセクションの前の方で作成したリクエスト・コンテキスト・オブジェクトの名前を入力します。このオブジェクトにより、ウォレットは同一データベース・セッション内の他のアプリケーションとは共有されなくなります。たとえば:
request_context => req_context);
7.6.4.2 他のアプリケーションとセッションを共有している場合に、リクエスト・コンテキストを使用してウォレットを保留
他のアプリケーションとデータベース・セッションを共有している場合は、リクエスト・コンテキストを使用してウォレットを保留にする必要があります。
アプリケーションがデータベース・セッションを排他的に使用している場合は、UTL_HTTP.SET_WALLET
プロシージャを使用してデータベース・セッションでウォレットを保留できます。
-
UTL_HTTP.SET_WALLET
プロシージャを使用して、ウォレットを保有するようにリクエストを構成します。
たとえば:
DECLARE req UTL_HTTP.REQ; BEGIN UTL_HTTP.SET_WALLET( path => 'file:path_to_directory_containing_wallet', password => 'wallet_password'|NULL); req := UTL_HTTP.BEGIN_REQUEST( url => 'URL_to_application'); ... END;
要求された保護されているURLが、認証にユーザー名とパスワードを必要とする場合は、SET_AUTHENTICATION_FROM_WALLET
プロシージャを使用してウォレットからユーザー名とパスワードを設定して認証します。
7.6.4.3 認証にクライアント証明書のみを使用
ユーザーに対してACLウォレットで適切な権限が付与されているかぎり、ユーザーの認証にクライアント証明書のみを使用できます。
要求された保護されているURLが、認証にクライアント証明書のみを必要とする場合、BEGIN_REQUEST
ファンクションはウォレットに割り当てられているACLでユーザーにuse_client_certificates
権限が付与されているものとみなして、ウォレットから必要なクライアント証明書を送信します。
認証はリモートWebサーバーで成功し、ユーザーはGET_RESPONSE
ファンクションを使用してHTTP応答を取得できます。
7.6.4.4 認証にパスワードを使用
要求したURLが保護されていてユーザー名とパスワードの認証を要求される場合は、ウォレットからユーザー名とパスワードを設定して認証します。
たとえば:
DECLARE req_context UTL_HTTP.REQUEST_CONTEXT_KEY; req UTL_HTTP.REQ; BEGIN ... UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET( r => HTTP_REQUEST, alias => 'alias_to_retrieve_credentials_stored_in_wallet', scheme => 'AWS|Basic', for_proxy => TRUE|FALSE); END;
詳細は、次のとおりです。
-
r
: 前のセクションで作成したUTL_HTTP.BEGIN_REQUEST
プロシージャで定義したHTTPリクエストを入力します。たとえば:r => req,
-
alias
: Oracleウォレットに格納されているユーザー名とパスワード資格証明を識別および取得するための別名を入力します。たとえば、このユーザー名とパスワード資格証明を識別するための別名がhr_access
であるとします。alias => 'hr_access',
-
scheme
: 次のいずれかを入力します。-
AWS
: Amazon Simple Storage Service(S3)スキームを指定します。このスキームは、Amazon.comのWebサイトへのアクセスを構成する場合にのみ使用します。(この設定の詳細は、Amazonにお問い合せください。) -
Basic
: HTTP basic認証を指定します。デフォルトはBasic
です。
たとえば:
scheme => 'Basic',
-
-
for_proxy
: HTTP認証情報がWebサーバーではなくHTTPプロキシ・サーバーへのアクセス用かどうかを指定します。デフォルトはFALSE
です。たとえば:
for_proxy => TRUE);
ウォレットのユーザー名とパスワードを使用するには、ウォレットに割り当てられているACLでユーザーにuse_passwords
権限が付与されている必要があります。
7.6.5 Oracleウォレットのアクセス制御権限の取消し
Oracleウォレットのアクセス制御権限を取り消すことができます。
-
ウォレットのアクセス制御リスト(ACL)のアクセス制御エントリ(ACE)から権限を取り消すには、
DBMS_NETWORK_ACL_ADMIN.REMOVE_WALLET_ACE
プロシージャを実行します。
たとえば:
BEGIN
DBMS_NETWORK_ACL_ADMIN.REMOVE_WALLET_ACE (
wallet_path => 'file:/oracle/wallets/hr_wallet',
ace => xs$ace_type(privilege_list => xs$name_list(privilege),
principal_name => 'hr_clerk',
principal_type => xs_acl.ptype_db),
remove_empty_acl => TRUE);
END;
/
この例では、remove_empty_acl
のTRUE
設定により、ウォレットACEの削除時に空になる場合にACLが削除されます。
親トピック: Oracleウォレットへのアクセス制御の構成
7.7 外部ネットワーク・サービスのアクセス制御の構成の例
1つのロールとネットワーク接続など、様々な状況に適したアクセス制御を構成できます。
- 例: 1つのロールおよびネットワーク接続のアクセス制御の構成
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
プロシージャで、1つのロールおよびネットワーク接続のアクセス制御を構成できます。 - 例: ユーザーとロールに対するアクセス制御の構成
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
で、1つのユーザーおよびロールの権限を拒否または付与するアクセス制御を構成できます。 - 例: DBA_HOST_ACESビューを使用した付与権限の表示
DBA_HOST_ACE
データ・ディクショナリ・ビューにはユーザーに付与されている権限が表示されます。 - 例: 非共有ウォレットのパスワードを使用するACLアクセスの構成
DBMS_NETWORK_ACL_ADMIN
およびUTL_HTTP
PL/SQLパッケージで、非共有ウォレットのパスワードを使用してACLアクセスを構成できます。 - 例: 共有データベース・セッションに使用するウォレットのACLアクセスの構成
DBMS_NETWORK_ACL_ADMIN
およびUTL_HTTP
PL/SQLパッケージで、共有データベース・セッションに使用するウォレットのACLアクセスを構成できます。
7.7.1 例: 1つのロールおよびネットワーク接続のアクセス制御の構成
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
プロシージャで、1つのロールおよびネットワーク接続のアクセス制御を構成できます。
例7-3は、1つのロール(acct_mgr
)のアクセス制御を構成し、このロールにwww.us.example.com
ホストにアクセスするhttp
権限を付与する方法を示しています。権限は、2013年1月1日に期限切れになります。
例7-3 1つのロールおよびネットワーク接続のアクセス制御の構成
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.us.example.com', lower_port => 80, ace => xs$ace_type(privilege_list => xs$name_list('http'), principal_name => 'acct_mgr', principal_type => xs_acl.ptype_db, end_date => TIMESTAMP '2013-01-01 00:00:00.00 -08:00'); END; /
親トピック: 外部ネットワーク・サービスのアクセス制御の構成の例
7.7.2 例: ユーザーとロールに対するアクセス制御の構成
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
で、1つのユーザーおよびロールの権限を拒否または付与するアクセス制御を構成できます。
その後、DBA_HOST_ACES
データ・ビュー・ディクショナリを問い合せて、権限付与に関する情報を確認できます。
例7-4では、データベース・ロール(acct_mgr
)に付与しますが、ロールを持つ場合でも特定のユーザー(psmith
)を拒否します。ACEが指定された順序で評価されるため、順序は重要です。この場合、拒否ACE(granted => false
)を最初に追加する必要があり、追加しないとユーザーを拒否できません。
例7-4 ユーザーおよびロールの付与および拒否を使用したアクセス制御の構成
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.us.example.com', lower_port => 80, upper_port => 80, ace => xs$ace_type(privilege_list => xs$name_list('http'), principal_name => 'psmith', principal_type => xs_acl.ptype_db, granted => false)); DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.us.example.com', lower_port => 80, upper_port => 80, ace => xs$ace_type(privilege_list => xs$name_list('http'), principal_name => 'acct_mgr', principal_type => xs_acl.ptype_db, granted => true)); END;
親トピック: 外部ネットワーク・サービスのアクセス制御の構成の例
7.7.3 例: DBA_HOST_ACESビューを使用した付与権限の表示
DBA_HOST_ACE
データ・ディクショナリ・ビューにはユーザーに付与されている権限が表示されます。
例7-5は、前述のアクセス制御リストで付与された権限をDBA_HOST_ACES
データ・ディクショナリ・ビューに表示する方法を示しています。
例7-5 DBA_HOST_ACESビューを使用した付与権限の表示
SELECT PRINCIPAL, PRIVILEGE, GRANT_TYPE FROM DBA_HOST_ACE WHERE PRIVILEGE = 'HTTP'; PRINCIPAL PRIVILEGE GRANT_TYPE ------------ ---------- -------------------- PSMITH HTTP FALSE ACCT_MGR HTTP TRUE
親トピック: 外部ネットワーク・サービスのアクセス制御の構成の例
7.7.4 例: 非共有ウォレットのパスワードを使用するACLアクセスの構成
DBMS_NETWORK_ACL_ADMIN
およびUTL_HTTP
PL/SQLパッケージで、非共有ウォレットのパスワードを使用してACLアクセスを構成できます。
例7-6では、人事部門の2つのロール、hr_clerk
とhr_manager
によるウォレットへのアクセスを構成しています。これらのロールは、use_passwords
権限を使用して、ウォレットに格納されているパスワードにアクセスします。この例では、ウォレットは同一データベース・セッション内の他のアプリケーションとは共有されません。
例7-6 非共有ウォレットのパスワードを使用するACLアクセスの構成
/* 1. At a command prompt, create the wallet. The following example uses the user name hr_access as the alias to identify the user name and password stored in the wallet. You must use this alias name when you call the SET_AUTHENTICATION_FROM_WALLET procedure later on. */ $ mkstore -wrl $ORACLE_HOME/wallets/hr_wallet -create Enter password: password Enter password again: password $ mkstore -wrl $ORACLE_HOME/wallets/hr_wallet -createCredential hr_access hr_usr Your secret/Password is missing in the command line Enter your secret/Password: password Re-enter your secret/Password: password Enter wallet password: password /* 2. In SQL*Plus, create an access control list to grant privileges for the wallet. The following example grants the use_passwords privilege to the hr_clerk role.*/ BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE ( wallet_path => 'file:/oracle/wallets/hr_wallet', ace => xs$ace_type(privilege_list => xs$name_list('use_passwords'), principal_name => 'hr_clerk', principal_type => xs_acl.ptype_db)); END; / /* 3. Create a request context and request object, and then set the authentication for the wallet. */ DECLARE req_context UTL_HTTP.REQUEST_CONTEXT_KEY; req UTL_HTTP.REQ; BEGIN req_context := UTL_HTTP.CREATE_REQUEST_CONTEXT( wallet_path => 'file:/oracle/wallets/hr_wallet', wallet_password => NULL, enable_cookies => TRUE, max_cookies => 300, max_cookies_per_site => 20); req := UTL_HTTP.BEGIN_REQUEST( url => 'www.hr_access.example.com', request_context => req_context); UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET( r => req, alias => 'hr_access'), scheme => 'Basic', for_proxy => FALSE); END; /
親トピック: 外部ネットワーク・サービスのアクセス制御の構成の例
7.7.5 例: 共有データベース・セッションに使用するウォレットのACLアクセスの構成
DBMS_NETWORK_ACL_ADMIN
およびUTL_HTTP
PL/SQLパッケージで、共有データベース・セッションに使用するウォレットのACLアクセスを構成できます。
例7-7は、ウォレットを共有データベース・セッションに使用するように構成し、現在のデータベース・セッション内のすべてのアプリケーションがこのウォレットへのアクセス権を持ちます。
例7-7 共有データベース・セッションに使用するウォレットのACLアクセスの構成
/* Follow these steps: 1. Use Oracle Wallet Manager to create the wallet and add the client certificate. 2. In SQL*Plus, configure access control to grant privileges for the wallet. The following example grants the use_client_certificates privilege to the hr_clerk and hr_mgr roles. */ BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE ( wallet_path => 'file:/oracle/wallets/hr_wallet', ace => xs$ace_type(privilege_list => xs$name_list('use-client_certificates'), principal_name => 'hr_clerk', principal_type => xs_acl.ptype_db)); DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE ( wallet_path => 'file:/oracle/wallets/hr_wallet', ace => xs$ace_type(privilege_list => xs$name_list('use_client_certificates'), principal_name => 'hr_mgr', principal_type => xs_acl.ptype_db)); END; / COMMIT; /* 3. Create a request object to handle the HTTP authentication for the wallet.*/ DECLARE req UTL_HTTP.req; BEGIN UTL_HTTP.SET_WALLET( path => 'file:/oracle/wallets/hr_wallet', password => NULL); req := UTL_HTTP.BEGIN_REQUEST( url => 'www.hr_access.example.com', method => 'POST', http_version => NULL, request_context => NULL); END; /
親トピック: 外部ネットワーク・サービスのアクセス制御の構成の例
7.8 ネットワーク・ホスト・コンピュータのグループの指定
ネットワーク・ホスト・コンピュータのグループを指定するには、ワイルドカードを使用できます。
-
アクセス制御リストをネットワーク・ホスト・コンピュータのグループに割り当てるには、アスタリスク(*)ワイルドカード文字を使用します。
たとえば、ドメインに属しているホスト・コンピュータには*.example.com
を入力し、IPサブネットに属しているIPv4アドレスには192.0.2.*
を入力します。アスタリスク・ワイルドカードは、最初(ドメインのピリオド(.)の前)または最後(IPサブネットのピリオド(.)の後)に配置する必要があります。たとえば、*.example.com
は有効ですが、*example.com
や*.example.*
は無効です。ワイルドカード文字の使用は、同じホスト・コンピュータに割り当てられている複数のアクセス制御リストの優先順位に影響を与えることに注意してください。IPv6アドレスには、ワイルドカード文字を使用できません。
クラスレス・ドメイン間ルーティング(CIDR)表記法では、インターネット上でのIPパケット・ルーティングにおけるIPv4アドレスとIPv6アドレスの分類が定義されています。DBMS_NETWORK_ACL_ADMIN
パッケージは、IPv4アドレスとIPv6アドレスの両方に対してCIDR表記法をサポートしています。このパッケージでは、IPv4射影IPv6アドレスまたはサブネットは、IPv4ネイティブ・アドレスまたはサブネットと同等であるとみなします。たとえば、::ffff:192.0.2.1
は192.0.2.1
と同等で、::ffff:192.0.2.1/120
は192.0.2.*
と同等です。
7.9 複数のアクセス制御リスト割当てでのホスト・コンピュータの優先順位
ドメインに割り当てられているアクセス制御リストの優先順位は、サブ・ドメインに割り当てられているアクセス制御リストの優先順位よりも低くなります。
ホスト・コンピュータとそのドメインに割り当てられている複数のアクセス制御リストでは、ホスト・コンピュータに割り当てられているアクセス制御リストが、ドメインに割り当てられているアクセス制御リストよりも優先されます。
ドメインに割り当てられているアクセス制御リストの優先順位は、サブ・ドメインに割り当てられているアクセス制御リストの優先順位よりも低くなります。たとえば、ホストserver.us.example.com
に割り当てられているアクセス制御リストが、そのドメインに割り当てられている他のアクセス制御リストに先行して最初に選択されます。追加のアクセス制御リストがサブ・ドメインに割り当てられていた場合、優先順位は次のようになります。
-
server.us.example.com
-
*.us.example.com
-
*.example.com
-
*.com
-
*
同様に、IPアドレス(IPv4とIPv6の両方)とIPアドレスが所属するサブネットに割り当てられている複数のアクセス制御リストでは、IPアドレスに割り当てられているアクセス制御リストが、サブネットに割り当てられているアクセス制御リストよりも優先されます。サブネットに割り当てられているアクセス制御リストの優先順位は、サブネットに含まれる小さいサブネットに割り当てられているアクセス制御リストの優先順位よりも低くなります。
たとえば、IPアドレス192.0.2.3
に割り当てられているアクセス制御リストが、そのIPアドレスが所属するサブネットに割り当てられている他のアクセス制御リストに先行して最初に選択されます。追加のアクセス制御リストがサブネットに割り当てられていた場合、優先順位は次のようになります。
-
192.0.2.3
(または::ffff:192.0.2.3
) -
192.0.2.3/31
(または::ffff:192.0.2.3/127
) -
192.0.2.3/30
(または::ffff:192.0.2.3/126
) -
192.0.2.3/29
(または::ffff:192.0.2.3/125
) -
...
-
192.0.2.3/24
(または::ffff:192.0.2.3/120
または192.0.2.*
) -
...
-
192.0.2.3/16
(または::ffff:192.0.2.3/112
または192.0.*
) -
...
-
192.0.2.3/8
(または::ffff:192.0.2.3/104
または192.*
) -
...
-
::ffff:192.0.2.3/95
-
::ffff:192.0.2.3/94
-
...
-
*
7.10 ポート範囲指定によるアクセス制御リスト割当てでのホストの優先順位
アクセス制御リスト内のホストの優先順位は、ポート範囲の使用の影響を受けます。
ポート範囲の指定があるアクセス制御リストがホスト・コンピュータ、ドメインまたはIPサブネットに割り当てられている場合、そのアクセス制御リストは、同じホスト、ドメインまたはIPサブネットに割り当てられているポート範囲の指定がないアクセス制御リストよりも優先されます。
たとえば、server.us.example.com
のポート80から99のいずれかのポートへのTCP接続があるとします。ポート範囲外のserver.us.example.com
に割り当てられている他のアクセス制御リストに先行して、server.us.example.com
でポート80から99に割り当てられているアクセス制御リストが最初に選択されます。
7.11 ネットワーク・ホストへのユーザー・アクセスに影響を与える権限割当てのチェック
管理者とユーザーは、どちらもネットワーク接続およびドメイン権限をチェックできます。
- ネットワーク・ホストへのユーザー・アクセスに影響を与える権限割当てについて
OracleにはDBA向けのデータ・ディクショナリ・ビューが用意されており、権限の割当てに関する情報を確認できます。 - ユーザーのネットワーク接続およびドメインに対する権限のチェック方法
データベース管理者は、DBA_HOST_ACES
データ・ディクショナリ・ビューを問い合せて、特定のユーザーまたはロールに付与された権限を確認できます。 - 例: 管理者によるユーザー・ネットワーク・アクセス制御権限のチェック
DBA_HOST_ACES
データ・ディクショナリ・ビューでは、ユーザーのネットワーク・アクセス制御権限をチェックできます。 - ユーザーによる各自のネットワーク接続およびドメインに対する権限のチェック方法
ユーザーはUSER_HOST_ACES
データ・ディクショナリ・ビューを問い合せて、自分のネットワークおよびドメインの権限を調べることができます。 - 例: ユーザーによるネットワーク・アクセス制御権限のチェック
USER_HOST_ACESデータ・ディクショナリ・ビューには、ホスト・コンピュータのネットワーク・アクセス制御権限が表示されます。
7.11.1 ネットワーク・ホストへのユーザー・アクセスに影響を与える権限割当てについて
OracleにはDBA向けのデータ・ディクショナリ・ビューが用意されており、権限の割当てに関する情報を確認できます。
データベース管理者は、DBA_HOST_ACES
データ・ディクショナリ・ビューを使用して、アクセス制御リストでデータベース・ユーザーまたはロールに対して付与または拒否したネットワーク権限を問い合せ、それらの権限が特定の期間のみ有効かどうかを問い合せることができます
現時点でユーザーに権限が付与されているかどうか、ユーザーに割り当てられているロール、アクセス制御エントリの順序などを判断するために、ビューで提供される情報を使用したデータの組合せが必要になる場合があります。
データベース管理者権限のないユーザーには、アクセス制御リストにアクセスしたり、DBMS_NETWORK_ACL_ADMIN
の各ファンクションを起動する権限はありません。ただし、データベース管理者権限のないユーザーは、USER_HOST_ACES
データ・ディクショナリ・ビューを問い合せて各自の権限をチェックすることはできます。
データベース管理者とユーザーは、次のDBMS_NETWORK_ACL_UTILITY
ファンクションを使用して、2つのホスト、ドメインまたはサブネットが同じかどうか、あるいはホスト、ドメインまたはサブネットが他のホスト、ドメインまたはサブネットと同じ、または他のホスト、ドメインまたはサブネットに含まれるかどうか、を判断します。
-
EQUALS_HOST
: 2つのホスト、ドメインまたはサブネットが同じかどうかを示す値を戻します。 -
CONTAINS_HOST
: ホスト、ドメインまたはサブネットが他のホスト、ドメインまたはサブネットと同じかどうか、または他のホスト、ドメインまたはサブネットに含まれるかどうかを示す値を示します。また、ACL割当てのために、含まれているドメインまたはサブネットの相対的な優先順位も示します。
IPv6アドレスを使用しない場合、データベース管理者およびユーザーは、次のDBMS_NETWORK_ACL_UTILITY
ファンクションを使用して、ホストが所属しているドメインまたはIPv4サブネットのリストを生成し、ホストの割当てに従って優先順位別にアクセス制御リストをソートできます。
-
DOMAINS
: アクセス制御リストが、指定のネットワーク・ホスト、サブドメインまたはIPサブネットに対する権限に影響を与える可能性があるドメインまたはIPサブネットのリストを戻します。 -
DOMAIN_LEVEL
: 指定のホストのドメイン・レベルを戻します。
7.11.2 ユーザーのネットワーク接続およびドメインに対する権限のチェック方法
データベース管理者は、DBA_HOST_ACES
データ・ディクショナリ・ビューを問い合せて、特定のユーザーまたはロールに付与された権限を確認できます。
DBA_HOST_ACES
ビューには、ネットワーク接続またはドメインへのアクセスを決定するアクセス制御リストが表示され、各アクセス制御リストについて、ユーザーのアクセス権限が付与されている(GRANTED
)か、拒否されている(DENIED
)か、あるいは適用外(NULL
)かを確認できます。このビューの問合せを実行できるのは、データベース管理者のみです。
7.11.3 例: 管理者によるユーザー・ネットワーク・アクセス制御権限のチェック
DBA_HOST_ACES
データ・ディクショナリ・ビューでは、ユーザーのネットワーク・アクセス制御権限をチェックできます。
例7-8は、ユーザーpreston
によるwww.us.example.com
への接続について、データベース管理者がユーザーの権限をチェックする方法を示しています。
この例では、ユーザーpreston
にはwww.us.example.com
で見つかったすべてのネットワーク・ホスト接続の権限が付与されました。ところが、preston
はポート80でのホスト接続へのアクセス権を付与されたが、ポート3000-3999でのホスト接続へのアクセス権を拒否されたと仮定します。この場合は、ポート80でのホスト接続のためにアクセス制御を構成し、ポート3000-3999でのホスト接続のために別個のアクセス制御構成を行う必要があります。
例7-8 管理者によるユーザー・ネットワーク・アクセス制御権限のチェック
SELECT HOST, LOWER_PORT, UPPER_PORT, ACE_ORDER, PRINCIPAL, PRINCIPAL_TYPE, GRANT_TYPE, INVERTED_PRINCIPAL, PRIVILEGE, START_DATE, END_DATE FROM (SELECT ACES.*, DBMS_NETWORK_ACL_UTILITY.CONTAINS_HOST('www.us.example.com', HOST) PRECEDENCE FROM DBA_HOST_ACES ACES) WHERE PRECEDENCE IS NOT NULL ORDER BY PRECEDENCE DESC, LOWER_PORT NULLS LAST, UPPER_PORT NULLS LAST, ACE_ORDER; HOST LOWER_PORT UPPER_PORT ACE_ORDER PRINCIPAL PRINCIPAL_TYPE GRANT_TYPE INVERTED_PRINCIPAL PRIVILEGE START_DATE END_DATE ------------------ ---------- ---------- --------- --------- ---------------- ---------- ------------------ --------- ---------- -------- www.us.example.com 80 80 1 PRESTON DATABASE USER GRANT NO HTTP www.us.example.com 80 80 2 SEBASTIAN DATABASE USER GRANT NO HTTP *.us.example.com 1 ACCT_MGR DATABASE USER GRANT NO CONNECT * 1 HR_DBA DATABASE USER GRANT NO CONNECT * 1 HR_DBA DATABASE USER GRANT NO RESOLVE
7.11.4 ユーザーによる各自のネットワーク接続およびドメインに対する権限のチェック方法
ユーザーはUSER_HOST_ACES
データ・ディクショナリ・ビューを問い合せて、自分のネットワークおよびドメインの権限を調べることができます。
USER_HOST_ACES
ビューはPUBLIC
であるため、すべてのユーザーが問い合せることができます。
このビューでは、アクセス制御リストはユーザーに表示されません。このビューでユーザーの権限ステータスが判定され(GRANTED
またはDENIED
)、NULL
の場合、ユーザーはアクセス制御リストが自分に適用されないときは知る必要がないため、除外されます。言い換えるとOracle Databaseが提示するのは、Oracle Databaseによってアクセス権が明示的に付与または拒否されるネットワーク・ホスト上のユーザーのみです。そのため出力には、データベース管理者固有のDBA_HOST_ACES
ビューからの出力に見られる*.example.com
および*
は表示されません。
7.11.5 例: ユーザーによるネットワーク・アクセス制御権限のチェック
USER_HOST_ACESデータ・ディクショナリ・ビューには、ホスト・コンピュータのネットワーク・アクセス制御権限が表示されます。
例7-9は、ユーザーpreston
が、www.us.example.com
への接続について、自分の権限をチェックする方法を示しています。
例7-9 ユーザーによるネットワーク・アクセス制御権限のチェック
SELECT HOST, LOWER_PORT, UPPER_PORT, PRIVILEGE, STATUS FROM (SELECT ACES.*, DBMS_NETWORK_ACL_UTILITY.CONTAINS_HOST('www.us.example.com', HOST) PRECEDENCE FROM USER_HOST_ACES ACES) WHERE PRECEDENCE IS NOT NULL ORDER BY PRECEDENCE DESC, LOWER_PORT NULLS LAST, UPPER_PORT NULLS LAST; HOST LOWER_PORT UPPER_PORT PRIVILEGE STATUS ------------------ ---------- ---------- --------- ------- www.us.example.com 80 80 HTTP GRANTED
7.12 Javaデバッグ・ワイヤ・プロトコル操作のネットワーク・アクセスの構成
Java PL/SQLプロシージャをデバッグするには、jdwp
ACL権限を付与されていることが必要です。
SQL Developer、JDeveloperまたはOracle Developer Tools For Visual Studio (ODT)などのJavaデバッグ・ワイヤ・プロトコル(JDWP)ベースのデバッガを通じて、データベースのJavaおよびPL/SQLプロシージャをデバッグする場合、jdwp
ACL権限を付与して、特定のホストのデバッガにデータベース・セッションを接続する必要があります。
DEBUG CONNECT SESSION
システム権限と組み合せたjdwp
権限が必要です。
jdwp
ACL権限が付与されていない場合、リモート・ホストからJavaおよびPL/SQLストアド・プロシージャをデバッグしようとするときに、次のエラーが表示される可能性があります。
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at "SYS.DBMS_DEBUG_JDWP", line line_number
-
JDWP操作のネットワーク・アクセスを構成するには、
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
プロシージャを使用します。
次の例は、JDWP操作のネットワーク・アクセスの構成方法を示しています。
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'host', lower_port => null|port_number, upper_port => null|port_number, ace => xs$ace_type(privilege_list => xs$name_list('jdwp'), principal_name => 'username', principal_type => xs_acl.ptype_db)); END; /
詳細は、次のとおりです。
-
host
は、ホスト名、ドメイン名、IPアドレスまたはサブネットのいずれかです。 -
port_number
では、ポートの範囲を指定できます。ポートを使用する場合、lower_port
およびupper_port
値を省略します。 -
引用符で囲まれていないかぎり(たとえば、
principal_name => '"PSMITH"'
など)、username
は大/小文字を区別しません。
関連項目:
-
JDWPを使用したサーバー・アプリケーションのデバッグの詳細は、『Oracle Database Java開発者ガイド』を参照してください。
-
SQL Developerのリモート・デバッグの詳細は、Oracle SQL開発者ユーザーズ・ガイドを参照してください。
7.13 ユーザー・アクセス用に構成されたアクセス制御リストのデータ・ディクショナリ・ビュー
Oracle Databaseでは、既存のアクセス制御リストに関する情報の検索に使用できるデータ・ディクショナリ・ビューが提供されています。
表7-1 に、これらのビューを示します。
表7-1 アクセス制御リストに関する情報を表示するデータ・ディクショナリ・ビュー
ビュー | 説明 |
---|---|
|
ネットワーク・ホストに定義されたネットワーク権限が表示されます。このビューの |
|
ウォレット・パス、ACE順序、開始時間と終了時間、付与タイプ、権限およびプリンシパルの情報がリストされます |
|
ウォレットに対するアクセス制御リスト割当てが表示されます。このビューの |
|
ネットワーク・ホストに対するアクセス制御リスト割当てが表示されます。このビューの |
|
現行ユーザーがネットワーク・ホストにアクセスするためのネットワーク権限のステータスが表示されます。このビューの |
|
ウォレットのコンテンツにアクセスするため、現在のユーザーのウォレット権限のステータスが表示されます。このビューの |
関連項目:
これらのビューの詳細は、『Oracle Databaseリファレンス』を参照してください。