*****************************************************************************
* Description: Config Oracle UTL_MAIL package, and access control list [ACL]
* Date: 04:27 PM EST, 09/21/2018
*****************************************************************************

		 
<1> Network Access Control List:
     |
     |__ o. A network access control list (ACL) is an optional layer of security for your VPC that acts as a firewall for controlling traffic in and out of one or more subnets. 
     |      You might set up network ACLs with rules similar to your security groups in order to add an additional layer of security to your VPC.
     |
     |__ o. One database can have multiple ACL, but one target host can only have one ACL.
	
	
	
	
	
<2> Install UTL_MAIL Package as SYSDBA:
     |
     |__ CMD> sqlplus / as sysdba
     |
     |__ SQL> @?/rdbms/admin/utlmail.sql
     |
     |__ SQL> @?/rdbms/admin/prvtmail.plb	 
	
	
	
	
	
<3> Grant Execute Permission to Individual User:
     |
     |__ SQL> grant execute on UTL_MAIL TO User_1;
              grant execute on UTL_MAIL TO User_2;	 
	
	
	
	
	
<4> Setting Oracle database parameter for database to be aware of SMTP server:
     |
     |__ SQL> alter system set SMTP_OUT_SERVER='UTILITIES.emeralit.local';
              alter system set SMTP_OUT_SERVER='PCASW1P.FFNET.LOCAL:587';


	
	
	
	
<5> Sample PL\SQL Code for Sending Email via UTL_MAIL package:
     |
     |__ SQL> BEGIN
                     UTL_MAIL.send(
                             sender     => 'email@emeralit.com',
                             recipients => 'amos.geng@emeralit.com',
                             cc         => '',
                             bcc        => '',
                             subject    => 'UTL_MAIL Test',
                             message    => 'If you get this message it worked!'
                     );
              END;
              /
	 
	 

	 

<6> If the error "ORA-24247: network access denied by access control list (ACL)" coming up, please following below procedure to create ACL.




<7> Creating ACL in Oracle database. The principal could be a role:
     |
     |__ SQL> BEGIN 
                     DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( 
                             acl => 'ACL_NAME.xml', 
                             description => 'ACL_DESCRIPTION', 
                             principal => 'DB_USERNAME_1_AS_ACL_OWNER', 
                             is_grant => TRUE, 
                             privilege => 'connect', 
                             start_date => null, 
                             end_date => null
                     ); 
             END;
             /





<8> Adding more username or privilege to exsiting ACL:
     |
     |__ SQL> BEGIN
                     DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
                             acl       => 'ACL_NAME.xml',
                             principal => 'DB_USERNAME_2_AS_ACL_OWNER',
                             is_grant  => true,
                             privilege => 'connect'
                     );
             END;
             /

			 
			 


<9> Assigning ACL to an existing network resource:
     | 
     |__ SQL> BEGIN
                     DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
                             acl => 'ACL_NAME.xml',
                             host => 'UTILITIES.emeralit.local', 
                             lower_port => 25,
                             upper_port => null
                     ); 
             END;
             /
			 
			
			
	
	
<10> Drop ACL:
     |
     |__ SQL> BEGIN
                     DBMS_NETWORK_ACL_ADMIN.DROP_ACL(
                             'ACL_NAME.XML'
                     );
             END;
             /
			 


			 
<11> ACL dynamic views contains ACL metadata:
     |
     |__ SQL> select * from dba_network_acls;
	 
			 
			 
			 

			 
Reference:
     |
     |__ o. http://dba-oracle.com/t_ora_24247_network_access_denied_by_access_control_list_tips.htm
     |
     |__ o. https://oracle-base.com/articles/11g/fine-grained-access-to-network-services-11gr1
     |
     |__ o. https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_networkacl_adm.htm#CHDJFJFF
	
    
	

Your Comments