Oracle发送邮件配置1--DBMS_NETWORK_ACL_ADMIN介绍

179 篇文章 17 订阅

一、DBMS_NETWORK_ACL_ADMIN 子程序

DBMS_NETWORK_ACL_ADMIN软件包提供了管理网络访问控制列表 (ACL) 的界面,其子程序总结如下表。

子程序描述
CREATE_ACL 过程使用初始权限设置创建访问控制列表 (ACL)
ASSIGN_ACL 过程将访问控制列表 (ACL) 分配给网络主机,并且可以选择特定于 TCP 端口范围
DROP_ACL 程序删除访问控制列表 (ACL)
ADD_PRIVILEGE 过程添加权限以授予或拒绝访问控制列表 (ACL) 中的用户的网络访问权限
DELETE_PRIVILEGE 过程删除访问控制列表 (ACL) 中的权限
CHECK_PRIVILEGE 函数检查访问控制列表 (ACL) 中的用户是否授予或拒绝了权限
CHECK_PRIVILEGE_ACLID 函数通过指定访问控制列表的对象 ID,检查 ACL 中的用户是否授予或拒绝了权限
UNASSIGN_ACL 过程取消分配当前分配给网络主机的访问控制列表 (ACL)
1. 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 );

参数含义:

范围描述
aclACL 的名称,相对路径将相对于“/sys/acls”。
principal被授予或拒绝权限的主体(数据库用户或角色),区分大小写。
is_grant要授予或拒绝的网络权限 - ‘connect| resolve’(区分大小写)。如果数据库用户需要连接使用UTL_HTTP,UTL_SMTP,UTL_MAIL实用程序包,那么他或她需要对外部网络主机计算机的连接权限。要使用包解析指定主机 IP 地址的主机名或指定主机名的 IP 地址,请授予数据库用户解析权限。
privilege要授予或拒绝的网络权限
positionACE 的位置(从 1 开始)。如果给出了一个非NULL值,则特权将被添加到给定位置的新 ACE 中,并且不应该有另一个具有相同is_grant(授予或拒绝)的主体的 ACE 。如果给定NULL值,is_grant如果存在,则特权将添加到与主体匹配的 ACE,如果匹配的 ACE 不存在,则添加到ACL 的末尾。
start_date访问控制条目 (ACE) 的开始日期。指定后,ACE 将仅在指定日期及之后有效。如果将特权添加到现有 ACE ,则将忽略start_date 。
end_state访问控制条目 (ACE) 的结束日期。指定后,ACE 将在指定日期后到期。end_date必须大于或等于start_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;
2. 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);

参数含义:

范围描述
aclACL 的名称,相对路径将相对于“/sys/acls”。
host将分配 ACL 的主机。主机可以是主机的名称或 IP 地址。通配符可用于指定域或 IP 子网。主机名或域名不区分大小写。
lower_port如果不是NULL,则 作为TCP 端口范围的下限
upper_portTCP 端口范围的上限。如果NULL,则假定为lower_port。

使用说明

1)只能将一个 ACL 分配给任意主机、域或 IP 子网,以及 TCP 端口范围(如果已指定)。当您将新的访问控制列表分配给网络目标时,Oracle 数据库会取消分配先前分配给同一目标的访问控制列表。但是,Oracle 数据库不会删除访问控制列表。您可以使用DROP_ACL 过程删除访问控制列表。要删除访问控制列表分配,请使用UNASSIGN_ACL 过程。

2)分配给域的 ACL 的优先级低于分配给子域的其他 ACL,后者的优先级低于分配给单个主机的 ACL。因此,对于给定的主机说“www.us.oracle.com”,以下域以递减的优先级列出:

- www.us.oracle.com

- *.us.oracle.com

- *.oracle.com

- *.com

- *

同样,分配给子网的 ACL 的优先级低于分配给较小子网的其他 ACL,后者的优先级低于分配给各个 IP 地址的 ACL。因此,对于给定的 IP 地址,例如“192.168.0.100”,以下子网以递减的优先级列出:

- 192.168.0.100

- 192.168.0.*

- 192.168.*

- 192.*

- *

3)端口范围仅适用于 ACL 中的“连接”权限分配。ACL 中的“解析”权限分配仅在将 ACL 分配给没有端口范围的主机时才有效。

4)对于“连接”权限分配,分配给没有端口范围的主机的 ACL 的优先级低于分配给具有端口范围的同一主机的其他 ACL。

5)指定 TCP 端口范围时,lower_port 和 upper_port 都不能为NULL并且upper_port必须大于或等于lower_port。端口范围不得与已分配的同一主机的任何其他端口范围重叠。

6)要删除分配,请使用UNASSIGN_ACL 过程。

例子:

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

此函数检查 ACL 中的用户是否授予或拒绝了权限。

句法:

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

参数含义:

范围描述
aclACL 的名称,相对路径将相对于“/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;
4. 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;

参数含义:

范围描述
aclidACL的对象ID
user要检查的用户。如果用户是NULL,则假定调用者。用户名区分大小写,如在视图ALL_USERS的USERNAME列中一样。
privilege检查网络权限

返回值

当权限被授予时返回 1;当权限被拒绝时返回0;当特权既没有被授予也没有被拒绝时返回NULL。

5. CREATE_ACL 过程

此过程使用初始权限设置创建访问控制列表 (ACL)。ACL 必须至少具有一项权限设置。除非将 ACL 分配给网络目标,否则 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 );

参数含义:

范围描述
aclACL 的名称,相对路径将相对于“/sys/acls”。
descriptionACL 中的描述属性
principal被授予或拒绝权限的主体(数据库用户或角色),区分大小写。
is_grant是否授予权限
privilege要授予或拒绝的网络权限 - ‘connect| resolve’(区分大小写)。如果数据库用户需要连接使用UTL_HTTP,UTL_SMTP,UTL_MAIL实用程序包,那么他或她需要对外部网络主机计算机的连接权限。要使用包解析指定主机 IP 地址的主机名或指定主机名的 IP 地址,请授予数据库用户解析权限。
start_date访问控制条目 (ACE) 的开始日期。指定后,ACE 将仅在指定日期及之后有效。如果将特权添加到现有 ACE ,则将忽略start_date 。
end_state访问控制条目 (ACE) 的结束日期。指定后,ACE 将在指定日期后到期。end_date必须大于或等于start_date。如果将特权添加到现有 ACE ,则将忽略end_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;
6. 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);

参数含义:

范围描述
aclACL 的名称,相对路径将相对于“/sys/acls”。
principal将为其删除所有 ACE 的主体(数据库用户或角色)
is_grant权限被授予与否(被拒绝)。如果给出空值,则删除适用于授予或拒绝的权限。
privilege要删除的网络权限。如果给定NULL值,则删除适用于所有权限。

例子:

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

此过程删除访问控制列表 (ACL)。

句法:

DBMS_NETWORK_ACL_ADMIN.DROP_ACL (
   acl IN VARCHAR2);

参数含义:

范围描述
aclACL 的名称,相对路径将相对于“/sys/acls”。

例子:

BEGIN
   DBMS_NETWORK_ACL_ADMIN.DROP_ACL(
      acl => 'us-oracle-com-permissions.xml');
END;
8. 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);

参数含义:

范围描述
aclACL 的名称,相对路径将相对于“/sys/acls”。如果 acl 是NULL,则分配给主机的任何 ACL 都将被取消分配。
host将删除 ACL 的主机。主机可以是主机的名称或 IP 地址。通配符可用于指定域或 IP 子网。主机名或域名不区分大小写。如果主机为空,ACL 将从任何主机取消分配。如果host和acl都是NULL,则将删除所有 ACL 分配。
lower_port如果不是NULL,则 作为TCP 端口范围的下限
upper_portTCP 端口范围的上限。如果NULL,则假定为lower_port。

例子:

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

二、DBMS_NETWORK_ACL_ADMIN 实例演示

示例 1:将主机 www.us.oracle.com 的连接和解析权限授予 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 的解析权限授予 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_UTLITITY.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

例如,对于 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_port是 时NULL)。出于这个原因,我们不在查询中包含lower_port和upper_port列。

在这里插入图片描述

图片来源于网络

参考文章:DBMS_NETWORK_ACL_ADMIN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值