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

2023-09-25 7 0

一、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 );

参数含义:

范围 描述
acl ACL 的名称,相对路径将相对于“/sys/acls”。
principal 被授予或拒绝权限的主体(数据库用户或角色),区分大小写。
is_grant 要授予或拒绝的网络权限 - ‘connect| resolve’(区分大小写)。如果数据库用户需要连接使用UTL_HTTP,UTL_SMTP,UTL_MAIL实用程序包,那么他或她需要对外部网络主机计算机的连接权限。要使用包解析指定主机 IP 地址的主机名或指定主机名的 IP 地址,请授予数据库用户解析权限。
privilege 要授予或拒绝的网络权限
position ACE 的位置(从 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 过程。

例子:

BEGINDBMS_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);

参数含义:

范围 描述
acl ACL 的名称,相对路径将相对于“/sys/acls”。
host 将分配 ACL 的主机。主机可以是主机的名称或 IP 地址。通配符可用于指定域或 IP 子网。主机名或域名不区分大小写。
lower_port 如果不是NULL,则 作为TCP 端口范围的下限
upper_port TCP 端口范围的上限。如果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 过程。

例子:

BEGINDBMS_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;

参数含义:

范围 描述
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;
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;

参数含义:

范围 描述
aclid ACL的对象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 );

参数含义:

范围 描述
acl ACL 的名称,相对路径将相对于“/sys/acls”。
description ACL 中的描述属性
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 过程。

例子:

BEGINDBMS_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);

参数含义:

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

例子:

BEGINDBMS_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);

参数含义:

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

例子:

BEGINDBMS_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);

参数含义:

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

例子:

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

二、DBMS_NETWORK_ACL_ADMIN 实例演示

示例 1:将主机 www.us.oracle.com 的连接和解析权限授予 SCOTT。

BEGINDBMS_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 的权限即可。

BEGINDBMS_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。

BEGINDBMS_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。

BEGINDBMS_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) privilegeFROM dba_network_aclsWHERE host IN(SELECT * FROMTABLE(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    GRANTEDwww.us.oracle.com         3000      3999    /sys/acls/www.xml    GRANTEDwww.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) privilegeFROM dba_network_aclsWHERE host IN(SELECT * FROMTABLE(DBMS_NETWORK_ACL_UTILITY.DOMAINS('www.us.oracle.com'))) andlower_port IS NULL AND upper_port IS NULLORDER 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

代码编程
赞赏

相关文章

从微信企业邮箱登录入口收发邮件,让工作效率提升数倍
攻略:邮件搬家同一个域名操作步骤,设置邮箱搬家功能的方法
如何添加企业邮箱?企业邮箱添加成员流程分享
各企业邮箱对比,企业邮箱的作用有哪些?
常用外贸邮箱的正确选择让你事半功倍
外贸邮件群发邮箱,看看哪个更适合你的公司吧