我有一个应用程序需要通过 Oracle 触发器发送电子邮件。我知道在 Oracle 11g 中,您必须有一个 ACL 文件才能授予某些模式对网络的访问权限。我的计划是为每个需要访问网络的用户创建一个单独的 ACL 文件,然后使用以下查询检查它是否已正确创建:
SELECT * FROM DBA_NETWORK_ACLS;
但是,该查询似乎只返回了一条记录 - 始终是已创建的最新 ACL。这是否意味着您只能拥有一个 ACL?如果是这样,大概这意味着在客户端的服务器上安装此应用程序时,我必须将权限添加到他们现有的 ACL 而不是尝试创建新的?
谢谢!
更新
这些是我正在使用的命令:
--create ACL for USER1
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(ACL => 'testacl1.xml',
DESCRIPTION => 'ACL',
PRINCIPAL => 'USER1',
IS_GRANT => TRUE,
PRIVILEGE => 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL => 'testacl1.xml',
PRINCIPAL => 'USER1',
IS_GRANT => TRUE,
PRIVILEGE => 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(ACL => 'testacl1.xml', host => '*');
--create ACL for USER2
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(ACL => 'testacl2.xml',
DESCRIPTION => 'ACL',
PRINCIPAL => 'USER2',
IS_GRANT => TRUE,
PRIVILEGE => 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL => 'testacl2.xml',
PRINCIPAL => 'USER2',
IS_GRANT => TRUE,
PRIVILEGE => 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(ACL => 'testacl2.xml', host => '*');
问题是 testacl2 似乎正在覆盖 testacl1。这是否意味着我只能有一个 ACL 文件,或者每个主机只能有一个 ACL 文件?
检查为外部网络服务文档创建访问控制列表(查看参数描述后的第 2 步):
您的第二个任务只是替换了第一个任务。每个主机/域只能有一个 ACL 文件。
要让多个用户访问同一个 ACL,请使用命令“DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEG”向每个用户授予访问权限。
示例 1
将主机www.us.oracle.com的连接和解析权限授予SCOTT。
示例 2
将www.us.oracle.com的解析权限授予ADAMS。由于www.us.oracle.com的 ACL已经存在,只需添加 ADAMS 的权限即可。
参考:https ://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_networkacl_adm.htm#BABCGEAE