DBMS_NETWORK_ACL_ADMIN
パッケージは、ネットワークのアクセス制御リスト(ACL)を管理するためのインタフェースを提供します。
関連項目: 詳細は、『Oracle Databaseセキュリティ・ガイド』の外部ネットワーク・サービスへのファイングレイン・アクセスの管理に関する項を参照してください。 |
この章では、次の項目について説明します。
概要
推奨されないサブプログラム
セキュリティ・モデル
定数
例外
例
NETWORK_ACL_ADMIN
パッケージは、ネットワークのアクセス制御リスト(ACL)を管理するインタフェースを提供します。ACLを使用することで、UTL_TCP、UTL_HTTP、UTL_SMTPおよびUTL_INADDRなどのPL/SQLネットワーク・ユーティリティ・パッケージを使用した、データベースから外部ネットワークのサービスおよびリソースへのユーザーのアクセスが制御されます。
新しいアプリケーションでは、推奨されないサブプログラムは使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。
Oracle Database 12cでは、次のサブプログラムの使用は推奨されていません。
DBMS_NETWORK_ACL_ADMIN
パッケージでは、表101-1「DBMS_NETWORK_ACL_ADMINの定数」に示す定数が使用されます。
表101-1 DBMS_NETWORK_ACL_ADMINの定数
定数 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
IPアドレス・マスク: |
|
|
' |
IPサブネット・マスク: |
|
|
'[ |
ホスト名マスク: |
|
|
''\*(\.[^\.\:\/\*]+)*' |
ドメイン・マスク: |
次の表に、DBMS_NETWORK_ACL_ADMIN
パッケージで発生する例外を示します。
表101-2 DBMS_NETWORK_ACL_ADMINの例外
例外 | エラー・コード | 説明 |
---|---|---|
|
|
ACEはすでに存在します。 |
|
|
ACLが空です。 |
|
|
ACLが見つかりません。 |
|
|
ACLはすでに存在します。 |
|
|
ACLのパスが無効です。 |
|
|
ホストが無効です。 |
|
|
権限が無効です。 |
|
|
ウォレットのパスが無効です。 |
|
|
引数が間違っています。 |
|
|
プリンシパルが未解決です。 |
|
|
権限が付与されていません。 |
例1
ホストwww.us.example.com
に対するconnect
権限とresolve
権限をSCOTT
に付与します。
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.us.example.com', ace => xs$ace_type(privilege_list => xs$name_list('connect', 'resolve'), principal_name => 'scott', principal_type => xs_acl.ptype_db));
例2
SCOTT
のホストwww.us.example.com
に対するresolve
権限を取り消します。
dbms_network_acl_admin.remove_host_ace( host => 'www.us.example.com', ace => xs$ace_type(privilege_list => xs$name_list('resolve'), principal_name => 'scott', principal_type => xs_acl.ptype_db));
例3
ウォレットfile:/example/wallets/hr_wallet
に対するuse_client_certificates
権限とuse_passwords
権限をSCOTT
に付与します。
dbms_network_acl_admin.append_wallet_ace( wallet_path => 'file:/example/wallets/hr_wallet', ace => xs$ace_type(privilege_list => xs$name_list('use_client_certificates', 'use_passwords'), principal_name => 'scott', principal_type => xs_acl.ptype_db));
例4
SCOTT
からウォレットfile:/example/wallets/hr_wallet
に対するuse_passwords
権限を取り消します。
dbms_network_acl_admin.remove_wallet_ace( wallet_path => 'file:/example/wallets/hr_wallet', ace => xs$ace_type(privilege_list => xs$name_list('use_passwords'), principal_name => 'scott', principal_type => xs_acl.ptype_db));
例5
DBMS_NETWORK_ACL_UTLILITY
パッケージ内のCONTAINS_HOST
は、ドメインにホストが含まれるかどうかを判別します。DBA_HOST_ACE
ビューと一緒にこれを使用することで、ネットワーク・ホストにアクセスするユーザーとその権限の割当てを確認できます。たとえば、www.us.example.com
へのアクセスは次のようになります。
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 SCOTT DATABASE USER GRANT NO HTTP www.us.example.com 80 80 2 ADAMS DATABASE USER GRANT NO HTTP * 1 HQ_DBA DATABASE USER GRANT NO CONNECT * 1 HQ_DBA DATABASE USER GRANT NO RESOLVE
例6
たとえば、www.us.example.com
にアクセスするためのHQ_DBA
独自の権限は次のようになります。
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 ------------------ ---------- ---------- --------- ------- * CONNECT GRANTED * RESOLVE GRANTED
表101-3 DBMS_NETWORK_ACL_ADMINパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
(非推奨)アクセス制御リスト(ACL)で、ネットワーク・アクセス権を付与または拒否する権限をユーザーに追加します。 |
|
アクセス制御エントリ(ACE)をネットワーク・ホストのアクセス制御リスト(ACL)に追加します。 |
|
アクセス制御リスト(ACL)のアクセス制御エントリ(ACE)をネットワーク・ホストのACLに追加します。 |
|
アクセス制御エントリ(ACE)をウォレットのアクセス制御リスト(ACL)に追加します。 |
|
アクセス制御リスト(ACL)のアクセス制御エントリ(ACE)をウォレットのACLに追加します。 |
|
(非推奨)アクセス制御リスト(ACL)をホスト・コンピュータ、ドメインまたはIPサブネットと、TCPポート範囲(指定されている場合)に割り当てます。 |
|
(非推奨)アクセス制御リスト(ACL)をウォレットに割り当てます。 |
|
(非推奨)アクセス制御リスト(ACL)で、権限がユーザーに付与または拒否されているかどうかを確認します。 |
|
(非推奨)アクセス制御リストのオブジェクトIDを指定することによって、ACLで権限がユーザーに付与または拒否されているかどうかを確認します。 |
|
(非推奨)初期権限設定を使用してアクセス制御リスト(ACL)を作成します。 |
|
(非推奨)アクセス制御リスト(ACL)で権限を削除します。 |
|
(非推奨)アクセス制御リスト(ACL)を削除します。 |
|
特定のACEに一致するネットワーク・ホストのアクセス制御リスト(ACL)に含まれるアクセス制御エントリ(ACE)から権限を削除します。 |
|
特定のACEに一致するウォレットのアクセス制御リスト(ACL)に含まれるアクセス制御エントリ(ACE)から権限を削除します。 |
|
データベースからネットワーク・ホストへのアクセスを制御するために、そのホストのアクセス制御リスト(ACL)を設定します。 |
|
データベースからウォレットへのアクセスを制御するために、そのウォレットのアクセス制御リスト(ACL)を設定します。 |
|
(非推奨)ネットワーク・ホストに現在割り当てられているアクセス制御リスト(ACL)の割当てを解除します。 |
|
(非推奨)ウォレットに現在割り当てられているアクセス制御リスト(ACL)の割当てを解除します。 |
注意: Oracle Database 12cでは、このプロシージャの使用は推奨されていません。このパッケージでは、下位互換性を維持する目的で、このプロシージャを使用できますが、APPEND_HOST_ACEプロシージャとAPPEND_WALLET_ACEプロシージャを使用することをお薦めします。 |
このプロシージャは、ネットワーク・アクセス権を付与または拒否する権限をユーザーに追加します。アクセス制御エントリ(ACE)が存在しない場合は、これを作成します。
構文
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE ( acl IN VARCHAR2, principal IN VARCHAR2, is_grant IN BOOLEAN, privilege IN VARCHAR2, position IN PLS_INTEGER DEFAULT NULL, start_date IN TIMESTAMP WITH TIMESTAMP DEFAULT NULL, end_date IN TIMESTAMP WITH TIMESTAMP DEFAULT NULL );
パラメータ
表101-4 ADD_PRIVILEGEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ACLの名前。相対パスの起点は/sys/aclsとなります。 |
|
権限が付与または拒否されるプリンシパル(データベース・ユーザーまたはロール)。大/小文字が区別されます。 |
|
権限が付与されるか拒否されるかのいずれか。 |
|
付与または拒否されるネットワーク権限。 |
|
ACEの(1ベースの)位置。 |
|
アクセス制御エントリ(ACE)の開始日。指定した場合、ACEは指定された日以降にのみ有効になります。権限が既存のACEに追加される場合、 |
|
アクセス制御エントリ(ACE)の終了日。指定した場合、ACEは指定された日以降に期限切れになります。 |
このプロシージャは、アクセス制御エントリ(ACE)をネットワーク・ホストのアクセス制御リスト(ACL)に追加します。ACLはデータベースから特定のホストへのアクセスを制御し、ACEは特定のプリンシパルに付与または拒否される権限を指定します。
構文
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE ( host IN VARCHAR2, lower_port IN PLS_INTEGER DEFAULT NULL, upper_port IN PLS_INTEGER DEFAULT NULL, ace IN XS$ACE_TYPE);
使用上の注意
ホストACLの対応するACEに重複する権限が含まれている場合、それらはスキップされます。
ACEを削除するには、REMOVE_HOST_ACEプロシージャを使用します。
ホストのACLは、そのドメインのACLより優先されます。www.us.example.com
などの特定のホストでは、優先順位の高い順に次のドメインがリストされます。
www.us.example.com
*.us.example.com
*.example.com
*.com
*
IPアドレスのACLは、そのサブネットのACLより優先されます。192.168.0.100
などの特定のIPアドレスでは、優先順位の高い順に次のサブネットがリストされます。
192.168.0.100
192.168.0.*
192.168.*
192.*
*
resolve権限を持つACEは、ポート範囲が指定されていないホストのACLに対してのみ追加できます。
connect権限を持つACEが、ポート範囲が指定されたホストのACLと、ポート範囲が指定されていないホストのACLに追加された場合、ポート範囲が指定されたホストのACLが優先されます。
ホストのTCPポート範囲を指定する場合、そのホストの他の既存のポート範囲とオーバーラップする範囲は指定できません。
ACLを別のホストやウォレットと共有した場合、ACLが変更される前に、そのコピーが作成されます。
関連項目: XS$ACE_TYPEオブジェクト・タイプの詳細は、『Oracle Database Real Application Security管理者および開発者ガイド』 を参照してください。 |
このプロシージャは、アクセス制御リスト(ACL)のアクセス制御エントリ(ACE)をネットワーク・ホストのACLに追加します。
構文
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACL ( host IN VARCHAR2, lower_port IN PLS_INTEGER DEFAULT NULL, upper_port IN PLS_INTEGER DEFAULT NULL, acl IN VARCHAR2);
使用上の注意
ホストACLの対応するACEに重複する権限が含まれている場合、それらはスキップされます。
ACEを削除するには、REMOVE_HOST_ACEプロシージャを使用します。
ホストのACLは、そのドメインのACLより優先されます。www.us.example.com
などの特定のホストでは、優先順位の高い順に次のドメインがリストされます。
www.us.example.com
*.us.example.com
*.example.com
*.com
*
IPアドレスのACLは、そのサブネットのACLより優先されます。192.168.0.100
などの特定のIPアドレスでは、優先順位の高い順に次のサブネットがリストされます。
192.168.0.100
192.168.0.*
192.168.*
192.*
*
resolve権限を持つACEは、ポート範囲が指定されていないホストのACLに対してのみ追加できます。
connect権限を持つACEが、ポート範囲が指定されたホストのACLと、ポート範囲が指定されていないホストのACLに追加された場合、ポート範囲が指定されたホストのACLが優先されます。
ホストのTCPポート範囲を指定する場合、そのホストの他の既存のポート範囲とオーバーラップする範囲は指定できません。ACLを別のホストやウォレットと共有した場合、ACLが変更される前に、そのコピーが作成されます。
このプロシージャは、アクセス制御エントリ(ACE)をウォレットのアクセス制御リスト(ACL)に追加します。ACLはデータベースから特定のウォレットへのアクセスを制御し、ACEは特定のプリンシパルに付与または拒否される権限を指定します。
使用上の注意
ホストACLの対応するACEに重複する権限が含まれている場合、それらはスキップされます。
ACEを削除するには、REMOVE_WALLET_ACEプロシージャを使用します。
ACLを別のホストやウォレットと共有した場合、ACLが変更される前に、そのコピーが作成されます。
関連項目: XS$ACE_TYPEオブジェクト・タイプの詳細は、『Oracle Database Real Application Security管理者および開発者ガイド』 を参照してください。 |
注意: Oracle Database 12cでは、このプロシージャの使用は推奨されていません。このパッケージでは、下位互換性を維持する目的で、このプロシージャを使用できますが、APPEND_HOST_ACEプロシージャとAPPEND_WALLET_ACEプロシージャを使用することをお薦めします。 |
このプロシージャは、アクセス制御リスト(ACL)をホスト・コンピュータ、ドメインまたはIPサブネットと、TCPポート範囲(指定されている場合)に割り当てます。
構文
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL ( acl IN VARCHAR2, host IN VARCHAR2, lower_port IN PLS_INTEGER DEFAULT NULL, upper_port IN PLS_INTEGER DEFAULT NULL);
使用上の注意
ホスト・コンピュータ、ドメインまたはIPサブネットと、TCPポート範囲(指定されている場合)に割り当てることができるACLは1つだけです。新しいアクセス制御リストをネットワーク・ターゲットに割り当てると、同じターゲットに割り当てられている以前のアクセス制御リストの割当てが解除されます。ただし、アクセス制御リストは削除されません。アクセス制御リストを削除するには、DROP_ACLプロシージャを使用します。アクセス制御リストの割当てを削除するには、UNASSIGN_ACLプロシージャを使用します。
ドメインに割り当てられているACLの優先順位は、サブドメインに割り当てられている他のACLよりも低く、サブドメインに割り当てられているACLの優先順位は、個々のホストに割り当てられているACLよりも低くなります。このため、www.us.example.comなどの特定のホストでは、優先順位の高い順に次のドメインがリストされます。
- www.us.example.com
- *.us.example.com
- *.example.com
- *.com
- *
同様に、サブネットに割り当てられているACLの優先順位は、より小さいサブネットに割り当てられている他のACLよりも低く、より小さいサブネットに割り当てられているACLの優先順位は、個々のIPアドレスに割り当てられているACLよりも低くなります。このため、192.168.0.100などの特定のIPアドレスでは、優先順位の高い順に次のサブネットがリストされます。
- 192.168.0.100
- 192.168.0.*
- 192.168.*
- 192.*
- *
ポート範囲は、ACLのconnect権限の割当てにのみ適用できます。ACLのresolve権限の割当ては、ポート範囲なしでACLがホストに割り当てられている場合にのみ有効です。
connect権限の割当てでは、ポート範囲なしでホストに割り当てられているACLの優先順位は、ポート範囲を指定して同じホストに割り当てられている他のACLよりも低くなります。
TCPポート範囲を指定する場合は、lower_port
とupper_port
の両方がNULL
ではなく、upper_port
がlower_port
以上である必要があります。ポート範囲は、同じホストですでに割り当てられている他のポート範囲とオーバーラップしないようにする必要があります。
割当てを削除するには、UNASSIGN_ACLプロシージャを使用します。
注意: Oracle Database 12cでは、このプロシージャの使用は推奨されていません。このパッケージでは、下位互換性を維持する目的で、このプロシージャを使用できますが、APPEND_HOST_ACEプロシージャとAPPEND_WALLET_ACEプロシージャを使用することをお薦めします。 |
このプロシージャは、アクセス制御リスト(ACL)をWalletに割り当てます。
例
BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL( acl => 'wallet-acl.xml', description => 'Wallet ACL', principal => 'SCOTT', is_grant => TRUE, privilege => 'use-client-certificates'); DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE( acl => 'wallet-acl.xml', principal => 'SCOTT', is_grant => TRUE, privilege => 'use-passwords'); DBMS_NETWORK_ACL_ADMIN.ASSIGN_WALLET_ACL( acl => 'wallet-acl.xml', wallet_path => 'file:/example/wallets/test_wallet'); END;
注意: Oracle Database 12cでは、このプロシージャの使用は推奨されていません。このプロシージャは、下位互換性を維持する目的でのみ、引き続きパッケージで提供されます。 |
このファンクションは、ACLで権限がユーザーに付与または拒否されているかどうかを確認します。
構文
DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE ( acl IN VARCHAR2, user IN VARCHAR2, privilege IN VARCHAR2) RETURN NUMBER;
注意: Oracle Database 12cでは、このプロシージャの使用は推奨されていません。このプロシージャは、下位互換性を維持する目的でのみ、引き続きパッケージで提供されます。 |
このファンクションは、アクセス制御リストのオブジェクトIDを指定することによって、ACLで権限がユーザーに付与または拒否されているかどうかを確認します。
構文
DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID ( aclid IN RAW, user IN VARCHAR2 DEFAULT NULL) privilege IN VARCHAR2, RETURN NUMBER;
注意: Oracle Database 12cでは、このプロシージャの使用は推奨されていません。このパッケージでは、下位互換性を維持する目的で、このプロシージャを使用できますが、APPEND_HOST_ACEプロシージャとAPPEND_WALLET_ACEプロシージャを使用することをお薦めします。 |
このプロシージャは、初期権限設定を使用してアクセス制御リスト(ACL)を作成します。ACLには、少なくとも1つの権限設定がある必要があります。ACLのアクセス制御は、ネットワーク・ターゲットに割り当てられるまで有効になりません。
構文
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl IN VARCHAR2, description IN VARCHAR2, principal IN VARCHAR2, is_grant IN BOOLEAN, privilege IN VARCHAR2, start_date IN TIMESTAMP WITH TIMEZONE DEFAULT NULL, end_date IN TIMESTAMP WITH TIMEZONE DEFAULT NULL );
パラメータ
表101-13 CREATE_ACLプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ACLの名前。相対パスの起点は/sys/aclsとなります。 |
|
ACLの記述属性。 |
|
権限が付与または拒否されるプリンシパル(データベース・ユーザーまたはロール)。大/小文字が区別されます。 |
|
権限が付与されるか拒否されるかのいずれか。 |
|
付与または拒否されるネットワーク権限 - |
|
アクセス制御エントリ(ACE)の開始日。指定した場合、ACEは指定された日以降にのみ有効になります。 |
|
アクセス制御エントリ(ACE)の終了日。指定した場合、ACEは指定された日以降に期限切れになります。 |
注意: Oracle Database 12cでは、このプロシージャの使用は推奨されていません。このパッケージでは、下位互換性を維持する目的で、このプロシージャを使用できますが、REMOVE_HOST_ACEプロシージャとREMOVE_WALLET_ACEプロシージャを使用することをお薦めします。 |
このプロシージャは、アクセス制御リストの権限を削除します。
構文
DBMS_NETWORK_ACL_ADMIN.DELETE_PRIVILEGE ( acl IN VARCHAR2, principal IN VARCHAR2, is_grant IN BOOLEAN DEFAULT NULL, privilege IN VARCHAR2 DEFAULT NULL);
注意: Oracle Database 12cでは、このプロシージャの使用は推奨されていません。このプロシージャは、下位互換性を維持する目的でのみ、引き続きパッケージで提供されます。 |
このプロシージャは、アクセス制御リスト(ACL)を削除します。
このプロシージャは、特定のACEに一致するネットワーク・ホストのアクセス制御リスト(ACL)に含まれるアクセス制御エントリ(ACE)から権限を削除します。
構文
DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE ( host IN VARCHAR2, lower_port IN PLS_INTEGER DEFAULT NULL, upper_port IN PLS_INTEGER DEFAULT NULL, ace IN XS$ACE_TYPE, remove_empty_acl IN BOOLEAN DEFAULT FALSE);
このプロシージャは、特定のACEに一致するウォレットのアクセス制御リスト(ACL)に含まれるアクセス制御エントリ(ACE)から権限を削除します。
構文
DBMS_NETWORK_ACL_ADMIN.REMOVE_WALLET_ACE ( wallet_path IN VARCHAR2, ace IN XS$ACE_TYPE, remove_empty_acl IN BOOLEAN DEFAULT FALSE);
このプロシージャは、データベースからネットワーク・ホストへのアクセスを制御するために、そのホストのアクセス制御リスト(ACL)を設定します。
構文
DBMS_NETWORK_ACL_ADMIN.SET_HOST_ACL ( host IN VARCHAR2, lower_port IN PLS_INTEGER DEFAULT NULL, upper_port IN PLS_INTEGER DEFAULT NULL, acl IN VARCHAR2);
注意: Oracle Database 12cでは、このプロシージャの使用は推奨されていません。このパッケージでは、下位互換性を維持する目的で、このプロシージャを使用できますが、REMOVE_HOST_ACEプロシージャとREMOVE_WALLET_ACEプロシージャを使用することをお薦めします。 |
このプロシージャは、ネットワーク・ホストに現在割り当てられているアクセス制御リスト(ACL)の割当てを解除します。
構文
DBMS_NETWORK_ACL_ADMIN.UNASSIGN_ACL ( acl IN VARCHAR2 DEFAULT NULL, host IN VARCHAR2 DEFAULT NULL, lower_port IN PLS_INTEGER DEFAULT NULL, upper_port IN PLS_INTEGER DEFAULT NULL);
パラメータ
表101-20 UNASSIGN_ACLファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ACLの名前。相対パスの起点は/sys/aclsとなります。ACLが |
|
ACLが削除されるホスト。ホストは、ホスト名またはホストのIPアドレスによって指定できます。ワイルドカードを使用すると、ドメインやIPサブネットを指定できます。ホストまたはドメイン名は大/小文字が区別されません。hostが |
|
TCPポート範囲の下限( |
|
TCPポート範囲の上限。 |
注意: Oracle Database 12cでは、このプロシージャの使用は推奨されていません。このパッケージでは、下位互換性を維持する目的で、このプロシージャを使用できますが、REMOVE_HOST_ACEプロシージャとREMOVE_WALLET_ACEプロシージャを使用することをお薦めします。 |
このプロシージャは、Walletに現在割り当てられているアクセス制御リスト(ACL)の割当てを解除します。
構文
UTL_HTTP.UNASSIGN_WALLET_ACL ( acl IN VARCHAR2 DEFAULT NULL, wallet_path IN VARCHAR2 DEFAULT NULL);