珠海网站建设建站系统,yy直播是个什么样的平台,重庆社区app最新版本下载,wordpress大学主题下载在《使用包实现存储过程邮件发送》(http://space.itpub.net/17203031/viewspace-700327)中#xff0c;笔者已经初步介绍了使用UTL_MAIL包实现系统邮件发送功能。UTL_MAIL包较传统的PL/SQL邮件发送已经有很大改进和简化。但是对于一般系统而言#xff0c;邮件功能设置(如发送、…在《使用包实现存储过程邮件发送》(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_NC2(3i_vc_subject in varchar2,4i_vc_message in varchar2,5o_vc_message out varchar26)7is8vc_subject varchar2(1000);9begin10vc_subject : Message From NBS System : ||i_vc_subject;1112utl_mail.send(sender liuziyuacca.com.cn,13recipients realkid4126.com,14subject vc_subject,15message i_vc_message,mime_type text/plain;charsetUTF-8);16exception17when others then18o_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 completedvc_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 createdSQL create user test identified by test;User createdSQL grant connect to test;Grant succeededSQL grant resource to test;Grant succeededSQL 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/testora11g;Connected to Oracle Database11gEnterpriseEdition Release11.2.0.1.0Connected as testSQL 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 completedvc_message---------邮件发送成功。5、结论上述实验实现了对应用用户最小范围的权限设置实现统一的邮件发送规范。注意此处我们借用了存储过程的定义者权限机制。在默认情况下调用一个存储过程中使用的对象和系统权限是这个存储过程定义者拥有的权限。Sys用户拥有对utl_*包和ACL访问权限所以调用者只需要拥有存储过程的执行权限就可以了。这样的配置也可以防止系统接口被滥用。在进一步考虑如果需要对p_mailutil_for_nbs_nc源代码进行屏蔽可以考虑使用wrap功能加以实现可以参见笔者《使用Wrap加密保护Oracle程序源代码》(http://space.itpub.net/17203031/viewspace-695700)相关内容。