【ORACLE】简单谈谈ORACLE数据库中的ACL配置
ORACLE数据库内可以通过调用内置的一些包对外部发起TCP通讯,比如UTL_HTTP/UTL_SMTP/UTL_TCP/UTL_INADDR等,但是为了保证安全,ORACLE数据库有ACL(Access Control List 访问控制列表)的配置,只有进行过对应正确的配置,才能成功向外发起TCP通讯;如果配置不对,在访问的时候肯能会报错“ORA-24247 网络访问被访问控制列表 (ACL) 拒绝”。
上图为通常情况下,使用dbms_network_acl_admin包配置ACL规则的步骤,其实在这个包还可以配置wallet证书,不需要在PL/SQL代码中再去指定wallet路径了。另外还可以配置ACE访问控制条目,但不在本篇的讨论范围内,也就不说了。
在配置前,先查询一下两个视图
select * from dba_network_acls;
Select * From dba_network_acl_privileges ;
dba_network_acls为assign_acl维护进去的
dba_network_acl_privileges为create_acl和add_privilege维护进去的
如果dba_network_acl_privileges中有可用的记录,那么我们可以跳过create_acl这一步,直接使用存在的xml文件来新增权限;如果没有,那么我们就先创建一个acl
一、创建ACL
begin
dbms_network_acl_admin.create_acl(
acl => 'utl_http.xml', -- 自定义文件名称
description => 'HTTP Access', -- 自定义描述
principal => 'DBUSER', -- 要配置的数据库账号,大小写敏感
is_grant => TRUE, -- 授权还是取消授权
privilege => 'connect', -- 连接权限
start_date => null, -- 起始日期,不维护则为不限制,下同
end_date => null -- 结束日期
);
end;
/
二、然后再在这个acl中给这个用户增加一个resolve的权限
begin
dbms_network_acl_admin.add_privilege( acl => 'utl_http.xml', -- 刚才创建的acl名称
principal => 'DBUSER', -- 与上同
is_grant => TRUE, -- 与上同
privilege => 'resolve', -- resolve权限
start_date => null,
end_date => null);
end;
/
三、最后在acl中添加要访问的目标网址(ip和域名均可),可以指定端口范围
begin
dbms_network_acl_admin.assign_acl(
acl => 'utl_http.xml',
host => 'openo2o.jd.com',
lower_port => null, -- 允许访问的起始端口号
upper_port => Null -- 允许访问的截止端口号
);
commit;
end;
/
配置完成后,查询一下前面说的两个视图,可以找到刚刚维护的规则信息。
如果以后要对已维护的ACL新增用户,单独执行第二步即可;
如果是要对已维护的ACL增加要访问的网址,单独执行第三步即可;
如果是要不同的用户允许访问不同的网址,则要再另外创建ACL了
即,一个ACL规则配置的就是 多个用户访问多个网址
想了解更多,请参考oracle官方文档
https://docs.oracle.com/en/database/oracle/oracle-database/21/arpls/DBMS_NETWORK_ACL_ADMIN.html
posted on 2021-10-04 14:19 DarkAthena 阅读(627) 评论(0) 编辑 收藏 举报