您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

oracle11g之ACL拙见

2025/6/16 10:47:29发布39次查看
错误样例(使用utl_http发送http请求时,报出如下错误): 原因: 1、oracle允许使用几个pl/sql api(utl_tcp, utl_smtp, utl_mail, utl_http和 utl_inaddr)访问外部网络服务,这些api都使用tcp协议。 2、在oracle 10g是通过一个基于用户是否被授予执行某
错误样例(使用utl_http发送http请求时,报出如下错误):
原因:
1、oracle允许使用几个pl/sql api(utl_tcp, utl_smtp, utl_mail, utl_http和 utl_inaddr)访问外部网络服务,这些api都使用tcp协议。
2、在oracle 10g是通过一个基于用户是否被授予执行某个包的许可的 on/off开关来实现的,oracle 11g引入了细粒度访问网络服务.
3、通过在xml db 数据库中使用访问控制列表(acl)来实现,允许控制哪个用户能够访问哪个网络资源,而不关心包的授权。
解决办法:
-- 查询网络访问控制列表 acl
?
1
select * from  dba_network_acls
-- 查询访问控制权限列表
?
1
select * from  dba_network_acl_privileges
-- 查询数据库中的用户,用户名大小写敏感
?
1
select username from dba_users where username like '%its%'
分配acl权限,执行如下sql语句:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
begin
  dbms_network_acl_admin.create_acl (       -- 创建访问控制文件(acl)
    acl         => 'utl_http.xml',          -- 文件名称
    description => 'http access',           -- 描述
    principal   => 'its',                   -- 授权或者取消授权账号,大小写敏感
    is_grant    => true,                    -- 授权还是取消授权
    privilege   => 'connect',               -- 授权或者取消授权的权限列表
    start_date  => null,                    -- 起始日期
    end_date    => null                     -- 结束日期
  );
dbms_network_acl_admin.add_privilege (    -- 添加访问权限列表项
    acl        => 'utl_http.xml',           -- 刚才创建的acl名称
    principal  => 'its',                    -- 授权或取消授权用户
    is_grant   => true,                     -- 与上同
    privilege  => 'resolve',                -- 权限列表
    start_date => null,                    
    end_date   => null
  );
dbms_network_acl_admin.assign_acl (       -- 该段命令意思是允许访问acl名为utl_http.xml下授权的用户,使用oracle网络访问包,所允许访问的目的主机,及其端口范围。
    acl        => 'utl_http.xml',
    host       => '100.1.2.1',              -- ip地址或者域名,填写:9000/hello与:9000/是会报host无效的
                                            -- 且建议使用ip地址或者使用域名,若用localhost,当oracle不是安装在本机上的情况下,会出现问题
    lower_port => 9000,                     -- 允许访问的起始端口号
    upper_port => null                      -- 允许访问的截止端口号
  );
  commit;
end;
begin
  dbms_network_acl_admin.assign_acl (       -- 可以授权多个主机,或者多个主机的多个端口
    acl        => 'utl_http.xml',
    host       => '10.100.49.138',
    lower_port => 80,
    upper_port => null
  );
  commit;
end;
请求测试:
?
1
select utl_http.request('http://localhost:9000/hello?wsdl') from dual;
若出现no listener,是因为授权主机时不能写localhost,应该写ip地址或者域名,如下图:
移除acl和权限控制
撤销分配acl到hostacl -- 与assign对应
?
1
2
3
4
5
6
7
8
9
10
11
12
begin
  dbms_network_acl_admin.unassign_acl(
acl        => 'utl_http.xml',
    host       => '100.1.2.1',
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product