Oracle UTL_MAIL郵件包程式使用實踐
在《使用UTL_MAIL包實現儲存過程郵件傳送》(http://space.itpub.net/17203031/viewspace-700327)中,筆者已經初步介紹了使用UTL_MAIL包實現系統郵件傳送功能。UTL_MAIL包較傳統的PL/SQL郵件傳送已經有很大改進和簡化。
但是對於一般系統而言,郵件功能設定(如傳送、接受郵箱設定、郵件伺服器)都是統一進行配置管理的,要有嚴格的控制。例如:一些敏感資訊就可能會透過有意的郵件呼叫加以洩露。本篇中,筆者介紹一種封裝utl_mail包的方法,進一步簡化郵件功能。
1、 相關配置專案
首先回顧一下使用Utl_mail包,並且進行郵件傳送需要進行的配置。
ü 在sys使用者schema下,手動安裝utl_mail程式包;
ü 對smtp_out_server引數進行配置,設定為郵件伺服器名稱或者IP地址;
ü 呼叫使用者必須對utl_mail、utl_tcp、utl_smtp和dbms_network_acl_admin包程式的execute許可權;
ü 將呼叫使用者加入到ACL訪問控制列表中,使其擁有connect許可權;
ü 如果進行中文message傳送,還要進行mime_type引數的設定。指定適合的編碼方式;
這些許可權設定賦予給系統使用者,潛在一些被濫用的可能。所以,我們可以藉助儲存過程的定義者許可權definer機制,對utl_mail包進行封裝。
2、 儲存過程定義
在sys schema下定義儲存過程p_mailutil_for_nbs_nc。
SQL> create or replace procedure P_MAILUTIL_FOR_NBS_NC
2 (
3 i_vc_subject in varchar2,
4 i_vc_message in varchar2,
5 o_vc_message out varchar2
6 )
7 is
8 vc_subject varchar2(1000);
9 begin
10 vc_subject := 'Message From NBS System : '||i_vc_subject;
11
12 utl_mail.send(sender => 'liuziyu@acca.com.cn',
13 recipients => 'realkid4@126.com',
14 subject => vc_subject,
15 message => i_vc_message,mime_type => 'text/plain;charset=UTF-8');
16 exception
17 when others then
18 o_vc_message := 'Errors in P_MAILUTIL_FOR_NBS_NC '||sqlcode||'-'|| sqlerrm;
19 return;
20 end P_MAILUTIL_FOR_NBS_NC;
21 /
Procedure created
在sys使用者下實驗執行。
SQL> var vc_message varchar2(1000);
SQL> exec p_mailutil_for_nbs_nc(i_vc_subject => '勞動法',i_vc_message => 'sldf燒錄機',o_vc_message => :vc_message);
PL/SQL procedure successfully completed
vc_message
---------
郵件收到
在sys使用者下,儲存過程p_mailutil_for_nbs_nc方法執行成功。
3、設定實驗使用者和許可權
在sys下,我們新建立一個使用者,設定基本許可權。
SQL> create public synonym p_mailutil_for_nbs_nc for p_mailutil_for_nbs_nc;
Synonym created
SQL> create user test identified by test;
User created
SQL> grant connect to test;
Grant succeeded
SQL> grant resource to test;
Grant succeeded
SQL> grant execute on p_mailutil_for_nbs_nc to test;
Grant succeeded
新建立使用者test,只具有connect和resource兩個基本許可權。此外就是對p_mailutil_for_nbs_nc的呼叫許可權。沒有utl_*包的許可權,也沒有可以設定ACL訪問許可權。
4、非sys使用者呼叫
下面實驗非sys使用者呼叫效果。
--切換使用者
SQL> conn test/test@ora11g;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as test
SQL> var vc_message varchar2(1000);
SQL> exec p_mailutil_for_nbs_nc(i_vc_subject => 'TSET勞動法',i_vc_message => 'User TesT:sldf燒錄機',o_vc_message => :vc_message);
PL/SQL procedure successfully completed
vc_message
---------
郵件傳送成功。
5、結論
上述實驗,實現了對應用使用者最小範圍的許可權設定,實現統一的郵件傳送規範。注意,此處我們借用了儲存過程的定義者許可權機制。在預設情況下,呼叫一個儲存過程中,使用的物件和系統許可權是這個儲存過程定義者擁有的許可權。Sys使用者擁有對utl_*包和ACL訪問許可權,所以呼叫者只需要擁有儲存過程的執行許可權就可以了。這樣的配置也可以防止系統介面被濫用。
在進一步考慮,如果需要對p_mailutil_for_nbs_nc原始碼進行遮蔽,可以考慮使用wrap功能加以實現,可以參見筆者《使用Wrap加密,保護Oracle程式原始碼》(http://space.itpub.net/17203031/viewspace-695700)相關內容。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-700438/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 傳送郵件 實現方法Oracle
- oracle 發郵件Oracle
- ORACLE_自動發郵件程式碼Oracle
- Oracle郵件傳送Oracle
- 用Oracle發郵件Oracle
- 使用oracle job定時傳送email郵件OracleAI
- springboot+kafka+郵件傳送(最佳實踐)Spring BootKafka
- 使用JavaMail實現收取和回覆郵件JavaAI
- 使用python傳送郵件和接收郵件Python
- Oracle 發郵件過程Oracle
- Java實現QQ郵件傳送郵件工具類Java
- 第9章使用PKI實現郵件安全
- 如何在Outlook安裝使用S/MIME郵件證書實現郵件簽名加密加密
- 使用phpmailer傳送郵件PHPAI
- 使用JavaMail傳送郵件JavaAI
- 使用nodemailer傳送郵件AI
- oracle安裝實施準備工作郵件通知模板Oracle
- 使用多執行緒實現郵件傳送執行緒
- 使用System.Net.Mail實現郵件群發AI
- google Guava包RateLimiter使用最佳實踐GoGuavaMIT
- 如何使用 ABAP 程式碼傳送郵件到指定郵箱試讀版
- win10郵件怎麼用qq郵箱 win10郵件如何使用qq郵箱Win10
- 用oracle傳送電子郵件Oracle
- EM配置Oracle郵件自動告警Oracle
- 成功透過ORACLE傳送郵件Oracle
- 用Oracle傳送郵件procedure (zt)Oracle
- 郵件營銷用純文字郵件還是html郵件HTML
- 郵件開發:傳送程式
- 簡單郵件系統程式
- 改進oracle utl_mail包的smtp_server設定和密碼驗證不足OracleAIServer密碼
- 郵件開發:接收解析郵件
- 使用 LDAP 目錄協議實現 Domino 郵件路由LDA協議路由
- 使用 smtplib 傳送郵件
- 使用 OfflineIMAP 同步郵件
- 如何使用Excel傳送郵件?Excel
- 使用python傳送郵件Python
- 使用C#傳送郵件C#
- JS實現發郵件功能JS