小强

导航

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

统计

Oracle ACL (Access Control List) 详细介绍

在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这个自带的包来完成。

1、首先,创建一个 ACL:

BEGIN
    dbms_network_acl_admin.create_acl(acl         => 'httprequestpermission.xml',
                                      DESCRIPTION => 'Normal Access',
                                      principal   => 'CRM', --表示赋予哪个用户
                                      is_grant    => TRUE,
                                      PRIVILEGE   => 'connect',
                                      start_date  => NULL,
                                      end_date    => NULL);
END;

2、接下来,为该 ACL 增加一个权限:在本示例中,您将尝试将该 ACL 局限于用户 CRM 您还可以定义开始和结束日期。

begin
    dbms_network_acl_admin.add_privilege(acl        => 'httprequestpermission.xml',
                                         principal  => 'CRM', --表示赋予权限给哪个用户
                                         is_grant   => TRUE,
                                         privilege  => 'connect',
                                         start_date => null,
                                         end_date   => null);
end;

3、分配将受该 ACL 制约的主机以及其他详细信息:

begin
    dbms_network_acl_admin.assign_acl(acl        => 'httprequestpermission.xml',
                                      host       => '172.31.3.10',
                                      lower_port => 1,
                                      upper_port => 9999);
end;

4、删除一个ACL权限:

begin
    dbms_network_acl_admin.unassign_acl(acl        => 'httprequestpermission.xml',
                                      host       => '172.30.1.10',
                                      lower_port => 1,
                                      upper_port => 9999);
end;

5、要了解 ACL 的详细信息,请查询 DBA_NETWORK_ACLS 和dba_network_acls视图:

SELECT acl,
       principal,
       privilege,
       is_grant,
       TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,
       TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date
  FROM dba_network_acl_privileges;

select * from dba_network_acls;

6、如果要删除上面的控制列表

BEGIN
   DBMS_NETWORK_ACL_ADMIN.drop_acl ( acl => 'httprequestpermission.xml');
END;

更多详细内容详见oracle官方文档:
https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_networkacl_adm.htm#BABCGEAE


 

posted on   搬砖狗-小强  阅读(268)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示