展会信息港展会大全

oracle11g之ACL拙见
来源:互联网   发布日期:2016-01-28 13:03:50   浏览:1936次  

导读:UTL_INADDR)访问外部网络服务,这些API都使用TCP协议。</p><p> 2、在Oracle 10g是通过一个基于用户是否被授予执行某个包的许可的 on/off开关来实现的,Oracle 11g引入了细粒度访问网络服务.</p><p> 3、通过在XML DB 数据库中使用访问控制列表(ACL)来...

错误样例(使用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开关来实现的,Oracle11g引入了细粒度访问网络服务.

3、通过在XML DB 数据库中使用访问控制列表(ACL)来实现,允许控制哪个用户能够访问哪个网络资源,而不关心包的授权。

解决办法:

-- 查询网络访问控制列表 acl

?

1

Select * Fromdba_network_acls

-- 查询访问控制权限列表

?

1

Select * Fromdba_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地址或者域名,填写http://localhost:9000/hello与http://localhost: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',

lower_port => 9000,

upper_port => Null

);

end;

删除用户的权限

?

1

2

3

4

5

6

7

begin

dbms_network_acl_admin.delete_privilege(

'utl_http.xml', 'ITS', NULL, 'resolve'

);

end;

--删除acl配置文件

?

1

2

3

4

5

begin

dbms_network_acl_admin.drop_acl(

'utl_http.xml'

);

end;

赞助本站

人工智能实验室
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港