Oracle创建控制列表ACL(Access Control List)
- Oracle ACL简介
- 一、先登陆163邮箱设置开启SMTP。
- 二、Oracle ACL控制列表处理
- (一)创建ACL(create_acl)
- (二)添加ACL权限(add_privilege)
- (三)分配ACL权限给哪些服务器使用(assign_acl)
- (四)取消分配一个ACL权限(unassign_acl)
- (五)删除ACL控制列表(drop_acl)
- (六)如何查询ACL相关
- 6.1、查询Oracle ACL控制列表清单:dba_network_acls视图
- 6.2、查询Oracle ACL授权清单:dba_network_acl_privileges视图
- (七)如何测试,运行存储过程。
- 7.1、执行SQL匿名块
- 7.2、执行情况
- 7.3、查看邮箱
Oracle ACL简介
- 在Oracle11g中,Oracle在安全方面有了很多的改进,而在网络权限控制方面,也有一个新的概念提出来,叫做ACL(Access Control List), 这是一种细粒度的权限控制。在ACL之前,我们对于有一些程序包,例如UTL_MAIL, UTL_SMTP等这些包,你可以利用这些包连接到外部的主机,而默认情况下,这些包都是都是赋予了public角色,所以可能会导致利用这些PL/SQL程序包的恶意工具,所以Oracle提出了一个新的概念来解决这个问题,那就是ACL。
- 在开始展开ACL之前,首先明确一些概念。 ACL这个概念不是Oracle首先提出来的,在很多地方的权限管理都用到了ACL,甚至在操作系统上也使用了ACL。一般,我们在做权限管理时,牵扯到一个问题,就是谁要在什么对象上作什么?这个正是对应了我们ACL中的概念。Principal will have what privileges on what object.谁就是principal, 什么对象就是我们的object, 做什么就是我们的privilege。那么如果有了这种细粒度的权限控制,我们就可以定义我们哪些用户拥有哪个远程主机的什么权限了。有了这个概念我们就可以看看如何使用ACL了。我们主要使用的是DBMS_NETWORK_ACL_ADMIN这个自带的包来完成。
一、先登陆163邮箱设置开启SMTP。
如何得到上面登录SMTP服务器的密码
我们这里以 163 邮箱为例
首先登录到163邮箱,点击[设置],然后点击设置下面的[POP3/SMTP/IMAP]
然后看左边的SideBar,点击[客户端授权密码]
最后在右边的页面中按照操作要求设置该邮箱的客户端授权码(登录SMTP服务器的密码)
二、Oracle ACL控制列表处理
(一)创建ACL(create_acl)
使用 DBMS_NETWORK_ACL_ADMIN包的CREATE_ACL函数 创建访问控制列表ACL(ACL)
执行下面的SQL:
BEGIN
dbms_network_acl_admin.create_acl(acl => 'email_server_permissions.xml'
,description => 'Enables network permissions for the e-mail server'
,principal => 'LOG' -- 表示赋予权限给哪个用户
,is_grant => TRUE
,privilege => 'connect'
,start_date => NULL
,end_date => NULL);
COMMIT;
END;
(二)添加ACL权限(add_privilege)
接下来,为该 ACL 增加一个权限:在本示例中,您将尝试将该 ACL 局限于用户 LOG 您还可以定义开始和结束日期。
BEGIN
dbms_network_acl_admin.add_privilege(acl => 'email_server_permissions.xml'
,principal => 'LOG' -- 表示赋予权限给哪个用户
,is_grant => TRUE
,privilege => 'connect'
,start_date => NULL
,end_date => NULL);
END;
(三)分配ACL权限给哪些服务器使用(assign_acl)
分配将受该 ACL 制约的主机以及其他详细信息,使用DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL 将此 ACL 与邮件服务器相关联
执行下列SQL:
BEGIN
dbms_network_acl_admin.assign_acl(acl => 'email_server_permissions.xml'
,host => 'smtp.163.com' -- SMTP服务器地址
,lower_port => 25 -- 端口
,upper_port => NULL);
COMMIT;
END;
(四)取消分配一个ACL权限(unassign_acl)
把上一步的授权删除,可以用下列SQL语句实现:
BEGIN
dbms_network_acl_admin.unassign_acl(acl => 'email_server_permissions.xml'
,host => 'smtp.163.com' -- SMTP服务器地址
,lower_port => 25 -- 端口
,upper_port => NULL);
COMMIT;
END;
(五)删除ACL控制列表(drop_acl)
BEGIN
dbms_network_acl_admin.drop_acl(acl => 'email_server_permissions.xml');
COMMIT;
END;
/
(六)如何查询ACL相关
6.1、查询Oracle ACL控制列表清单:dba_network_acls视图
SELECT host
,lower_port
,upper_port
,acl
FROM dba_network_acls;
查询结果:
6.2、查询Oracle ACL授权清单:dba_network_acl_privileges视图
SELECT acl
,principal
,privilege
,is_grant
,to_char(start_date
,'yyyy-mon-dd') AS start_date
,to_char(end_date
,'dd - mon - yyyy') AS end_date
FROM dba_network_acl_privileges;
查询结果:
(七)如何测试,运行存储过程。
7.1、执行SQL匿名块
测试是否能成功发邮件,执行下面的SQL:
BEGIN
send_mail('tttzzzqqq@qq.com'
,'测试邮件'
,'来自plsql');
END;
注意:发送邮件的存过send_mail(),请看这篇博文:Oracle触发器发送邮件
7.2、执行情况
点“输出”查看结果:
7.3、查看邮箱
我们发现,可以收到消息。
至此,Oracle创建控制列表ACL(Access Control List)就给大家演示完了,有问题欢迎留言或私信!谢谢大家!