Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy cập mạng bị từ chối bởi danh sách kiểm soát truy cập (ACL) trong Cơ sở dữ liệu Oracle 11g

Tôi đã thực hiện nâng cấp này và đó là hàng giờ làm việc. Tất cả phải được làm lại theo cách khác cho phiên bản 12. Mọi cuộc gọi thủ tục đều phải có một cam kết. Ý tưởng chung là bạn tạo một quyền truy cập, thêm chi tiết, cấp đặc quyền. Bạn phải biết:

  • tên và cổng máy chủ thư của bạn
  • liệu bạn có cần người dùng và mật khẩu để truy cập hay không (có thể là không)
  • người dùng sẽ gọi gói thư, dễ dàng hơn nếu họ cũng sở hữu gói thư
/*create the access permission to connect*/

BEGIN

  DBMS_NETWORK_ACL_ADMIN.create_acl (
    acl          => 'utl_smtp.xml', 
    description  => 'access to smtp email',
    principal    => 'YourUser',
    is_grant     => TRUE, 
    privilege    => 'connect',
    start_date   => SYSTIMESTAMP,
    end_date     => NULL);

  COMMIT;

END;

--add the privilege to resolve names

BEGIN

  DBMS_NETWORK_ACL_ADMIN.add_privilege (
    acl          => 'utl_smtp.xml', 
    principal    => 'YourUser',
    is_grant     => TRUE, 
    privilege    => 'resolve');

  COMMIT;

END;

--assign your mailserver

BEGIN

  DBMS_NETWORK_ACL_ADMIN.assign_acl (
    acl => 'utl_smtp.xml',
    host => 'mailserver.YourDomain.local', 
    lower_port => 25,
    upper_port => NULL); 
    commit;

END;


  BEGIN

  DBMS_NETWORK_ACL_ADMIN.assign_acl (
    acl => 'utl_smtp.xml',
    host => 'YourDBName', 
    lower_port => 25,
    upper_port => NULL); 

  COMMIT;

  END;

  --more housekeeping

  alter system set smtp_out_server = 'mailserver.YourDomain.local:25' scope = both;

 --make sure the user can access the smtp packages

 GRANT EXECUTE ON UTL_TCP TO YourUser;
 GRANT EXECUTE ON UTL_SMTP TO YourUser;
 GRANT EXECUTE ON UTL_MAIL TO YourUser;

--check your work

select * from dba_network_acls;

--verify permissions for your user

SELECT DECODE(
DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(
   'utl_smtp.xml', 'YourUser', 'resolve'),
1, 'GRANTED', 0, 'DENIED', NULL) PRIVILEGE 
FROM DUAL;

--if you have created access permissions you wish to delete
--using the information from the select use this to delete what you don't want

exec DBMS_NETWORK_ACL_ADMIN.DROP_ACL ('acl_utl_smtp.xml');

--for more troubleshooting try this barebones mail procedure, run with your user. Copied from [here][1]
DECLARE
v_From      VARCHAR2(80) := '[email protected]';
v_Recipient VARCHAR2(80) := '[email protected]';
v_Subject   VARCHAR2(80) := 'test subject';
v_Mail_Host VARCHAR2(30) := 'mail.mycompany.com';
v_Mail_Conn utl_smtp.Connection;
crlf        VARCHAR2(2)  := chr(13)||chr(10);
BEGIN
v_Mail_Conn := utl_smtp.Open_Connection(v_Mail_Host, 25);
utl_smtp.Helo(v_Mail_Conn, v_Mail_Host);
utl_smtp.Mail(v_Mail_Conn, v_From);
utl_smtp.Rcpt(v_Mail_Conn, v_Recipient);
utl_smtp.Data(v_Mail_Conn,
'Date: '   || to_char(sysdate, 'Dy, DD Mon YYYY hh24:mi:ss') || crlf ||
'From: '   || v_From || crlf ||
'Subject: '|| v_Subject || crlf ||
'To: '     || v_Recipient || crlf ||
crlf ||
'some message text'|| crlf ||   -- Message body
'more message text'|| crlf
 );
utl_smtp.Quit(v_mail_conn);
EXCEPTION
WHEN utl_smtp.Transient_Error OR utl_smtp.Permanent_Error then
raise_application_error(-20000, 'Unable to send mail', TRUE);
END;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao SQL Engine được gọi cho cuộc gọi PL / SQL từ ứng dụng khách?

  2. Cách truyền vào mảng khi gọi thủ tục được lưu trữ với Spring Data JPA

  3. Cách gửi một yêu cầu POST với dữ liệu biểu mẫu và các tham số trong PL / SQL

  4. SQL Điền vào dữ liệu riêng biệt và một chuỗi

  5. Làm cách nào để xác định các hàng liên quan đến một bế tắc Oracle?