使用 APEX Oracle 11.2 发送电子邮件的 ACL

Posted

技术标签:

【中文标题】使用 APEX Oracle 11.2 发送电子邮件的 ACL【英文标题】:ACL for Sending e-Mail with APEX Oracle 11.2 【发布时间】:2022-01-17 13:16:27 【问题描述】:

我正在尝试使用 Oracle APEX 11.2 作为简单的发送电子邮件流程发送电子邮件,但我不知道如何设置正确的 ACL。我试过这个,但没有成功,仍然得到:ORA-24247:网络访问被访问控制列表(ACL)拒绝。我究竟做错了什么? SELECT * FROM dba_network_acl_privileges 显示所有规则都已被授予,select * from dba_network_acls 也显示这两个规则。 提前致谢!

BEGIN
DBMS_NETWORK_ACL_ADMIN.DROP_ACL (acl => 'send_mail.xml' );
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('send_mail.xml','Allow mail to be send', 'APEX_050100', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('send_mail.xml','APEX_050100',TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('send_mail.xml','APEX_050100',TRUE, 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (acl => 'send_mail.xml',host => '*',lower_port => null, upper_port => null);
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (acl => 'send_mail.xml',host => 'smtp.google.com',lower_port => null, upper_port => null);
commit;
END;


BEGIN
DBMS_NETWORK_ACL_ADMIN.DROP_ACL (acl => 'utl_smtp.xml' );
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('utl_smtp.xml','Allow mail to be send', 'APEX_050100', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('utl_smtp.xml','APEX_050100',TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('utl_smtp.xml','APEX_050100',TRUE, 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (acl => 'utl_smtp.xml',host => '*',lower_port => null, upper_port => null);
END;

【问题讨论】:

【参考方案1】:

我就是这样做的。

-- Drop ACL ====================================================================

BEGIN
   DBMS_NETWORK_ACL_ADMIN.drop_acl (acl => 'mydba.xml');
END;
/

-- Create ACL ==================================================================

BEGIN
   DBMS_NETWORK_ACL_ADMIN.create_acl (
      acl          => 'mydba.xml',
      description  => 'SMTP, MAIL, HTTP Access',
      principal    => 'LITTLEFOOT',
      is_grant     => TRUE,
      privilege    => 'connect',
      start_date   => NULL,
      end_date     => NULL);
END;
/

-- Assign ACL ==================================================================

BEGIN
   DBMS_NETWORK_ACL_ADMIN.assign_acl (acl         => 'mydba.xml',
                                      HOST        => '*',
                                      lower_port  => NULL,
                                      upper_port  => NULL);
END;
/

-- Add privilege ===============================================================

BEGIN
   -- LITTLEFOOT
   DBMS_NETWORK_ACL_ADMIN.add_privilege (acl         => 'mydba.xml',
                                         principal   => 'LITTLEFOOT',
                                         is_grant    => TRUE,
                                         privilege   => 'connect',
                                         start_date  => NULL,
                                         end_date    => NULL);

   DBMS_NETWORK_ACL_ADMIN.add_privilege (acl         => 'mydba.xml',
                                         principal   => 'LITTLEFOOT',
                                         is_grant    => TRUE,
                                         privilege   => 'resolve',
                                         start_date  => NULL,
                                         end_date    => NULL);
END;
/

COMMIT;

当新用户需要权限时,我只需从“添加权限”过程中复制/粘贴 LITTLEFOOT 的数据并更改主体名称(目前,我的脚本中有十几个用户)。

【讨论】:

非常感谢,我试过了,但没有成功。我认为我的问题是我不确定应该使用哪个主体,当我想从 APEX 应用程序发送时,不是 APEX_050100 吗? 不,“拥有”将发送邮件的架构是 Oracle 用户。例如,这可能是示例 scott 的架构,或 hr 和类似的。 原来如此,非常感谢!

以上是关于使用 APEX Oracle 11.2 发送电子邮件的 ACL的主要内容,如果未能解决你的问题,请参考以下文章

触发器共同在oracle apex应用程序中工作

通过apex发送时,合并字段值不会显示在电子邮件模板中

具有自动完成 oracle apex 的文本字段

Oracle APEX - 来自 LDAP 的 LOV

向 Oracle APEX 或 PLSQL 过程发送 POST 请求

Oracle Apex 21.1:如何使用散列密码创建、存储和检索(验证)用户