日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

oracle util_mail,Oracle UTL_MAIL邮件包程序使用实践

發布時間:2025/3/12 ChatGpt 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle util_mail,Oracle 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(

3i_vc_subject in varchar2,

4i_vc_message in varchar2,

5o_vc_message out varchar2

6)

7is

8vc_subject varchar2(1000);

9begin

10vc_subject := 'Message From NBS System : '||i_vc_subject;

11

12utl_mail.send(sender => 'liuziyu@acca.com.cn',

13recipients => 'realkid4@126.com',

14subject => vc_subject,

15message => i_vc_message,mime_type => 'text/plain;charset=UTF-8');

16exception

17when others then

18o_vc_message := 'Errors in P_MAILUTIL_FOR_NBS_NC '||sqlcode||'-'|| sqlerrm;

19return;

20end 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 Database11gEnterpriseEdition Release11.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)相關內容。

總結

以上是生活随笔為你收集整理的oracle util_mail,Oracle UTL_MAIL邮件包程序使用实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。