본문 바로가기

알아두면 좋은 정보/유용한 IT 정보

DBA_NETWORK_ACLS 오라클DB 메일발송 설정

https://oracle-base.com/articles/11g/fine-grained-access-to-network-services-11gr1


http://remidian.com/2013/01/email-network-access-in-oracle-11g-network-access-control-list-acl/



24247 ORA-24247: 네트워크 액세스가 ACL(액세스 제어 목록)에 의해 거부되었습니다.

1. sys/sysadmin으로 로그인
2. 아래 스크립트 실행


begin
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
acl => 'network_services.xml',
description => 'NETWORK ACL',
principal => 'PUBLIC',
is_grant => true,
privilege => 'connect');

DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'network_services.xml',
principal => 'PUBLIC',
is_grant => true,
privilege => 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => 'network_services.xml',
host => '*');

commit;
end;


네트워크확인

SELECT *

   FROM DBA_NETWORK_ACLS;


  1  SELECT acl,
  2         principal,
  3         privilege,
  4         is_grant,
  5         TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,
  6         TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date
  7* FROM   dba_network_acl_privileges


권한부여

BEGIN

  DBMS_NETWORK_ACL_ADMIN.assign_acl (

    acl => 'acl_scott.xml',

    host => 'mail.********.nl', 

    lower_port => 25,

    upper_port => NULL); 

  COMMIT;


오라클 메일 패키지 사용을 위해서  오라클DB에서 SMTP 메일서버를 접근할 수 있도록 환경설정을 해줘야 한다.


(가정) 오라클 DB의 TEST1 유저에게 메일을 보낼수 있는 권한을 부여한다고 가정했을 때

1. SYS유저로 ORADBA 권한으로 로그인

 CONN sys/password@db11g AS SYSDBA

 


2. 새로운 ACL(Access Control List) 파일 생성

(아래 스크립트의 경우 network_services.xml acl을 XML DB에 신규로 생성하면서 TEST1유저에게 외부 host의 network service에 접속을 허용)

 BEGIN

    DBMS_NETWORK_ACL_ADMIN.create_acl (

        acl => 'network_services.xml', -- acl 파일명 

        description => 'A network_services of the ACL functionality', -- 설명 

        principal => 'TEST1', -- 오라클 DB 유저 (반드시 대문자 사용)

        is_grant => TRUE, -- 권한여부 

        privilege => 'connect', --  권한종류 (반드시 소문자 사용)

        start_date => SYSTIMESTAMP,  -- 시작일자

        end_date => NULL);  -- 종류일자

    COMMIT;  

END;


3. IP Adress 또는 Network Host Name에 접속가능하도록 resolve 권한 추가 부여

(network_services.xml을 2번에서 생성했으므로 Add가 필요하며 이후 추가적으로 다른 유저에게 connect 또는 resolve 권한을 주기 위해서는 아래 내용을 계속 사용하면 됩니다)


BEGIN

    DBMS_NETWORK_ACL_ADMIN.add_privilege (

        acl => 'network_services.xml', 

        principal => 'TEST1', 

        is_grant => TRUE, 

        privilege => 'resolve', 

        position => NULL, 

        start_date => NULL, 

        end_date => NULL); 

    COMMIT; 

END;

 


4. 네트워크 호스트 지정(접속할 메일 서버 IP를 등록)

BEGIN

    DBMS_NETWORK_ACL_ADMIN.assign_acl (

        acl => 'network_services.xml',

        host => '192.168.2.3', -- 접속할 메일서버의 ip 또는 DNS,  * 를 입력하면 전부 허용

        lower_port => NULL, -- 기본으로 NULL을 입력하고 제한이 필요할 경우 입력

        upper_port => NULL);

        COMMIT;

END;


5. 등록 내용 확인

 

 SELECT *
  FROM DBA_NETWORK_ACL_PRIVILEGES;

SELECT *
  FROM DBA_NETWORK_ACLS;

 





여기까지가 완료되면 메일을 보내기 위한 기본적인 환경을 설정한 것입니다.


권한 삭제 및 추가 등은 아래 사이트를 참고하시면 됩니다.