ヘッダーをスキップ
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス
11g リリース2(11.2)
B56262-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

94 DBMS_NETWORK_ACL_ADMIN

DBMS_NETWORK_ACL_ADMINパッケージは、ネットワークのアクセス制御リスト(ACL)を管理するためのインタフェースを提供します。


関連項目:

詳細は、『Oracle Databaseセキュリティ・ガイド』の外部ネットワーク・サービスへのファイングレイン・アクセスの管理に関する項を参照してください。

この章では、次の項目について説明します。


DBMS_NETWORK_ACL_ADMINの使用方法


例1

ホストwww.us.oracle.comに対するconnect権限およびresolve権限をSCOTTに付与します。

BEGIN
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl         => 'www.xml',
                                    description => 'WWW ACL',
                                    principal   => 'SCOTT',
                                    is_grant    => true,
                                    privilege   => 'connect');
 
  DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl       => 'www.xml',
                                       principal => 'SCOTT',
                                       is_grant  => true,
                                       privilege => 'resolve');
 
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl  => 'www.xml',
                                    host => 'www.us.oracle.com');
END;
/
COMMIT;

例2

www.us.oracle.comに対するresolve権限をADAMSに付与します。www.us.oracle.comのACLはすでに存在しているため、ADAMSの権限のみを追加します。

BEGIN
  DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl       => 'www.xml',
                                       principal => 'ADAMS',
                                       is_grant  => true,
                                       privilege => 'resolve');
END;
/
COMMIT;

例3

ACL www.xmlをwww-proxy.us.oracle.comに割り当て、SCOTTおよびADAMSがwww-proxy.us.oracle.comにもアクセスできるようにします。

BEGIN
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl  => 'www.xml',
                                    host => 'www-proxy.us.oracle.com');
END;
/
COMMIT;

例4

www.us.oracle.comからACLの割当てを解除し、www.us.oracle.comへのアクセスが許可されないようにします。

BEGIN
  DBMS_NETWORK_ACL_ADMIN.UNASSIGN_ACL(host => 'www.us.oracle.com');
END;
/
COMMIT;

例5

DBMS_NETWORK_ACL_UTLILITYパッケージのDOMAINSファンクションは、ホストが属するすべてのドメインを戻します。このファンクションをこのパッケージのCHECK_PRIVILEGE_ACLIDファンクションとともに使用して、ネットワーク・ホストにアクセスするユーザーの権限に影響を与える権限の割当てを決定できます。DBMS_NETWORK_ACL_UTILITYパッケージのDOMAIN_LEVELファンクションは、各ドメインのレベルを戻し、優先順位に従ってACLの割当て順序を決定するときに使用できます。

たとえば、SCOTTがwww.us.oracle.comに接続する権限の場合は、次のとおりです。

  SELECT host, lower_port, upper_port, acl,
     DECODE(
         DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID(aclid, 'SCOTT', 'connect'),
            1, 'GRANTED', 0, 'DENIED', NULL) privilege
     FROM dba_network_acls
    WHERE host IN
      (SELECT * FROM
         TABLE(DBMS_NETWORK_ACL_UTILITY.DOMAINS('www.us.oracle.com')))
   ORDER BY DBMS_NETWORK_ACL_UTILITY.DOMAIN_LEVEL(host) desc, lower_port, 
                                               upper_port;


   HOST                 LOWER_PORT UPPER_PORT         ACL          PRIVILEGE
   -------------------- ---------- ---------- -------------------- ---------
   www.us.oracle.com            80         80 /sys/acls/www.xml    GRANTED
   www.us.oracle.com          3000       3999 /sys/acls/www.xml    GRANTED
   www.us.oracle.com                          /sys/acls/www.xml    GRANTED
   *.oracle.com                               /sys/acls/all.xml
   *                                          /sys/acls/all.xml

例6

たとえば、SCOTTがwww.us.oracle.comのドメイン名解決を行う権限の場合は、次のとおりです。

   SELECT host, acl,
     DECODE(
          DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID(aclid, 'SCOTT', 'resolve'),
            1, 'GRANTED', 0, 'DENIED', NULL) privilege
     FROM dba_network_acls
    WHERE host IN
      (SELECT * FROM
         TABLE(DBMS_NETWORK_ACL_UTILITY.DOMAINS('www.us.oracle.com'))) and
      lower_port IS NULL AND upper_port IS NULL
   ORDER BY DBMS_NETWORK_ACL_UTILITY.DOMAIN_LEVEL(host) desc;


   HOST                         ACL          PRIVILEGE
   -------------------- -------------------- ---------
   www.us.oracle.com    /sys/acls/www.xml    GRANTED
   *.oracle.com         /sys/acls/all.xml
   *                    /sys/acls/all.xml  
 

resolve権限は、ポート範囲なしで割り当てられたACL内でのみ有効です(lower_portおよびupper_portNULLの場合)。このため、例ではlower_portおよびupper_port列はこの問合せに含まれていません。


DBMS_NETWORK_ACL_ADMINサブプログラムの要約

表94-1 DBMS_NETWORK_ACL_ADMINパッケージのサブプログラム

サブプログラム 説明

ADD_PRIVILEGEプロシージャ


アクセス制御リスト(ACL)で、ネットワーク・アクセス権を付与または拒否する権限をユーザーに追加します。

ASSIGN_ACLプロシージャ


アクセス制御リスト(ACL)をネットワーク・ホストに割り当て、オプションで特定のTCPポート範囲に割り当てます。

ASSIGN_WALLET_ACLプロシージャ


アクセス制御リスト(ACL)をWalletに割り当てます。

CHECK_PRIVILEGEファンクション


アクセス制御リスト(ACL)で、権限がユーザーに付与または拒否されているかどうかを確認します。

CHECK_PRIVILEGE_ACLIDファンクション


アクセス制御リストのオブジェクトIDを指定することによって、ACLで権限がユーザーに付与または拒否されているかどうかを確認します。

CREATE_ACLプロシージャ


初期権限設定を使用してアクセス制御リスト(ACL)を作成します。

DELETE_PRIVILEGEプロシージャ


アクセス制御リスト(ACL)で権限を削除します。

DROP_ACLプロシージャ


アクセス制御リスト(ACL)を削除します。

UNASSIGN_ACLプロシージャ


ネットワーク・ホストに現在割り当てられているアクセス制御リスト(ACL)の割当てを解除します。

UNASSIGN_WALLET_ACLプロシージャ


Walletに現在割り当てられているアクセス制御リスト(ACL)の割当てを解除します。



ADD_PRIVILEGEプロシージャ

このプロシージャは、ネットワーク・アクセス権を付与または拒否する権限をユーザーに追加します。アクセス制御エントリ(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 );

パラメータ

表94-2 ADD_PRIVILEGEファンクションのパラメータ

パラメータ 説明

acl

ACLの名前。相対パスの起点は/sys/aclsとなります。

principal

権限が付与または拒否されるプリンシパル(データベース・ユーザーまたはロール)。大/小文字が区別されます。

is_grant

権限が付与されるか拒否されるかのいずれか。

privilege

付与または拒否されるネットワーク権限。

position

ACEの(1ベースの)位置。NULL以外の値を指定すると、新しいACEの特定の位置に権限が追加され、同じis_grant (付与または拒否)を持つプリンシパルに対して別のACEが存在しないようにする必要があります。NULL値を指定すると、プリンシパルとis_grantに一致するACEが存在する場合はそのACEに権限が追加され、一致するACEが存在しない場合はACLの終わりに権限が追加されます。

start_date

アクセス制御エントリ(ACE)の開始日。指定した場合、ACEは指定された日以降にのみ有効になります。権限が既存のACEに追加される場合、start_dateは無視されます。

end_date

アクセス制御エントリ(ACE)の終了日。指定した場合、ACEは指定された日以降に期限切れになります。end_datestart_date以降にする必要があります。権限が既存のACEに追加される場合、end_dateは無視されます。


使用上の注意

権限を削除するには、DELETE_PRIVILEGEプロシージャを使用します。

BEGIN
  DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
        acl         => 'us-oracle-com-permissions.xml',
        principal   => 'ST_USERS',
        is_grant    =>  TRUE,
        privilege   => 'connect')
END;

ASSIGN_ACLプロシージャ

このプロシージャは、アクセス制御リスト(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);

パラメータ

表94-3 ASSIGN_ACLファンクションのパラメータ

パラメータ 説明

acl

ACLの名前。相対パスの起点は/sys/aclsとなります。

host

ACLの割当て先のホスト。ホストは、ホスト名またはホストのIPアドレスによって指定できます。ワイルドカードを使用すると、ドメインやIPサブネットを指定できます。ホストまたはドメイン名は大/小文字が区別されません。

lower_port

TCPポート範囲の下限(NULLでない場合)。

upper_port

TCPポート範囲の上限。NULLの場合は、lower_portの値と想定されます。


使用上の注意

  • ホスト・コンピュータ、ドメインまたはIPサブネットと、TCPポート範囲(指定されている場合)に割り当てることができるACLは1つだけです。新しいアクセス制御リストをネットワーク・ターゲットに割り当てると、同じターゲットに割り当てられている以前のアクセス制御リストの割当てが解除されます。ただし、アクセス制御リストは削除されません。アクセス制御リストを削除するには、DROP_ACLプロシージャを使用します。アクセス制御リストの割当てを削除するには、UNASSIGN_ACLプロシージャを使用します。

  • ドメインに割り当てられているACLの優先順位は、サブドメインに割り当てられている他のACLよりも低く、サブドメインに割り当てられているACLの優先順位は、個々のホストに割り当てられているACLよりも低くなります。このため、www.us.oracle.comなどの特定のホストでは、優先順位の高い順に次のドメインがリストされます。

    - www.us.oracle.com

    - *.us.oracle.com

    - *.oracle.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_portupper_portの両方がNULLではなく、upper_portlower_port以上である必要があります。ポート範囲は、同じホストですでに割り当てられている他のポート範囲とオーバーラップしないようにする必要があります。

  • 割当てを削除するには、UNASSIGN_ACLプロシージャを使用します。

BEGIN
   DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
     acl         => 'us-oracle-com-permissions.xml',
     host        => '*.us.oracle.com',
     lower_port  => 80);
END;

ASSIGN_WALLET_ACLプロシージャ

このプロシージャは、アクセス制御リスト(ACL)をWalletに割り当てます。

構文

UTL_HTTP.ASSIGN_WALLET_ACL (
   acl          IN  VARCHAR2,
   wallet_path  IN  VARCHAR2);

パラメータ

表94-4 ASSIGN_WALLET_ACLプロシージャのパラメータ

パラメータ 説明

acl

ACLの名前。相対パスの起点は/sys/aclsとなります。

wallet_path

ACLの割当て先のWalletのディレクトリ・パス。このパスは大文字と小文字が区別され、形式はfile:directory-pathです。


使用上の注意

割当てを削除するには、UNASSIGN_WALLET_ACLプロシージャを使用します。

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:/oracle/wallets/test_wallet');
END;

CHECK_PRIVILEGEファンクション

このファンクションは、ACLで権限がユーザーに付与または拒否されているかどうかを確認します。

構文

DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE (
   acl             IN VARCHAR2,
   user            IN VARCHAR2,
   privilege       IN VARCHAR2)
  RETURN NUMBER;

パラメータ

表94-5 CHECK_PRIVILEGEファンクションのパラメータ

パラメータ 説明

acl

ACLの名前。相対パスの起点は/sys/aclsとなります。

user

チェック対象のユーザー。ユーザーがNULLである場合は、実行者と想定されます。ユーザー名はALL_USERSビューのUSERNAME列と同様、大/小文字が区別されます。

privilege

チェックするネットワーク権限。


戻り値

権限が付与された場合は1、権限が拒否された場合は0、権限が付与されず、かつ拒否されなかった場合には、NULLが戻されます。

SELECT DECODE(
  DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(
       'us-oracle-com-permissions.xml', 'SCOTT', 'resolve'),
  1, 'GRANTED', 0, 'DENIED', NULL) PRIVILEGE 
FROM DUAL;

CHECK_PRIVILEGE_ACLIDファンクション

このファンクションは、アクセス制御リストのオブジェクトIDを指定することによって、ACLで権限がユーザーに付与または拒否されているかどうかを確認します。

構文

DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID (
   aclid           IN RAW,
   user            IN VARCHAR2 DEFAULT NULL)
   privilege       IN VARCHAR2,
 RETURN NUMBER;

パラメータ

表94-6 CHECK_PRIVILEGE_ACLIDファンクションのパラメータ

パラメータ 説明

aclid

ACLのオブジェクトID

user

チェック対象のユーザー。ユーザーがNULLである場合は、実行者と想定されます。ユーザー名はALL_USERSビューのUSERNAME列と同様、大/小文字が区別されます。

privilege

チェックするネットワーク権限。


戻り値

権限が付与された場合は1、権限が拒否された場合は0、権限が付与されず、かつ拒否されなかった場合には、NULLが戻されます。


CREATE_ACLプロシージャ

このプロシージャは、初期権限設定を使用してアクセス制御リスト(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 );

パラメータ

表94-7 CREATE_ACLプロシージャのパラメータ

パラメータ 説明

acl

ACLの名前。相対パスの起点は/sys/aclsとなります。

description

ACLの記述属性。

principal

権限が付与または拒否されるプリンシパル(データベース・ユーザーまたはロール)。大/小文字が区別されます。

is_grant

権限が付与されるか拒否されるかのいずれか。

privilege

付与または拒否されるネットワーク権限 - 'connect | resolve'(大/小文字が区別されます)。データベース・ユーザーは、UTL_TCPUTL_HTTPUTL_SMTPおよびUTL_MAILユーティリティ・パッケージを使用して外部ネットワーク・ホスト・コンピュータに接続する場合、そのコンピュータに対するconnect権限が必要です。UTL_INADDRパッケージを使用して、与えられたホストIPアドレスからホスト名を解決したり、与えられたホスト名からIPアドレスを解決する場合は、データベース・ユーザーにresolve権限を付与します。

start_date

アクセス制御エントリ(ACE)の開始日。指定した場合、ACEは指定された日以降にのみ有効になります。

end_date

アクセス制御エントリ(ACE)の終了日。指定した場合、ACEは指定された日以降に期限切れになります。end_datestart_date以降にする必要があります。


使用上の注意

アクセス制御リストを削除するには、DROP_ACLプロシージャを使用します。

BEGIN
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
     acl          => 'us-oracle-com-permissions.xml',
     description  => 'Network permissions for *.us.oracle.com',
     principal    => 'SCOTT',
     is_grant     => TRUE,
     privilege    => 'connect');
END;

DELETE_PRIVILEGEプロシージャ

このプロシージャは、アクセス制御リストの権限を削除します。

構文

DBMS_NETWORK_ACL_ADMIN.DELETE_PRIVILEGE (
   acl           IN VARCHAR2,
   principal     IN VARCHAR2,
   is_grant      IN BOOLEAN DEFAULT NULL,
   privilege     IN VARCHAR2 DEFAULT NULL);

パラメータ

表94-8 DELETE_PRIVILEGEファンクションのパラメータ

パラメータ 説明

acl

ACLの名前。相対パスの起点は/sys/aclsとなります。

principal

すべてのACEが削除されるプリンシパル(データベース・ユーザーまたはロール)。

is_grant

権限が付与されるか拒否されるかのいずれか。NULL値を指定すると、付与された権限と拒否された権限の両方が削除されます。

privilege

削除されるネットワーク権限。NULL値を指定すると、すべての権限が削除されます。


BEGIN
  DBMS_NETWORK_ACL_ADMIN.DELETE_PRIVILEGE(
        acl         => 'us-oracle-com-permissions.xml',
        principal   => 'ST_USERS')
END;

DROP_ACLプロシージャ

このプロシージャは、アクセス制御リスト(ACL)を削除します。

構文

DBMS_NETWORK_ACL_ADMIN.DROP_ACL (
   acl           IN VARCHAR2);

パラメータ

表94-9 DROP_ACLプロシージャのパラメータ

パラメータ 説明

acl

ACLの名前。相対パスの起点は/sys/aclsとなります。


BEGIN
   DBMS_NETWORK_ACL_ADMIN.DROP_ACL(
      acl => 'us-oracle-com-permissions.xml');
END;

UNASSIGN_ACLプロシージャ

このプロシージャは、ネットワーク・ホストに現在割り当てられているアクセス制御リスト(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);

パラメータ

表94-10 UNASSIGN_ACLファンクションのパラメータ

パラメータ 説明

acl

ACLの名前。相対パスの起点は/sys/aclsとなります。ACLがNULLの場合、ホストに割り当てられているACLの割当てが解除されます。

host

ACLが削除されるホスト。ホストは、ホスト名またはホストのIPアドレスによって指定できます。ワイルドカードを使用すると、ドメインやIPサブネットを指定できます。ホストまたはドメイン名は大/小文字が区別されません。hostがNULLの場合、任意のホストからACLの割当てが解除されます。hostaclの両方がNULLの場合、ホストに割り当てられているACLのすべての割当てが解除されます。

lower_port

TCPポート範囲の下限(NULLでない場合)。

upper_port

TCPポート範囲の上限。NULLの場合は、lower_portの値と想定されます。


BEGIN
   DBMS_NETWORK_ACL_ADMIN.UNASSIGN_ACL(
     host        => '*.us.oracle.com',
     lower_port  => 80);
END;

UNASSIGN_WALLET_ACLプロシージャ

このプロシージャは、Walletに現在割り当てられているアクセス制御リスト(ACL)の割当てを解除します。

構文

UTL_HTTP.UNASSIGN_WALLET_ACL (
   acl          IN  VARCHAR2 DEFAULT NULL,
   wallet_path  IN  VARCHAR2 DEFAULT NULL);

パラメータ

表94-11 UNASSIGN_WALLET_ACLプロシージャのパラメータ

パラメータ 説明

acl

ACLの名前。相対パスの起点は/sys/aclsとなります。aclNULLの場合、Walletに割り当てられているACLの割当てが解除されます。

wallet_path

ACLの割当て先のWalletのディレクトリ・パス。このパスは大文字と小文字が区別され、形式はfile:directory-pathです。aclwallet_pathの両方がNULLの場合、Walletに割り当てられているACLのすべての割当てが解除されます。


BEGIN
  DBMS_NETWORK_ACL_ADMIN.UNASSIGN_WALLET_ACL(
    acl         => 'wallet-acl.xml', 
    wallet_path => 'file:/oracle/wallets/test_wallet');
END;