作者: 黄永兵 来由:51CTO.com
阅读提示:Oracle容许哄骗几个PL/SQL API(UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP和 UTL_INADDR)接见内部搜集效力,这些API都哄骗TCP协议,在上一个数据库版本中(10g)是经过一个基于用户能否被赋予执行某个包的答允的on/off开关来完成的,Oracle 11g引入了细粒度接见搜集效力,经过在XML DB 数据库中哄骗接见控制列表(ACL)来完成。
Oracle容许哄骗几个PL/SQL API(UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP和 UTL_INADDR)接见内部搜集效力,这些API都哄骗TCP协议,在上一个数据库版本中(10g)是经过一个基于用户能否被赋予执行某个包的答允的on/off开关来完成的,Oracle 11g引入了细粒度接见搜集效力,经过在XML DB 数据库中哄骗接见控制列表(ACL)来完成,容许控制哪个用户可以接见哪个搜集资源,而不体贴包的授权。
哄骗FTP或WebDav可以间接在XML DB 数据库中创建、点窜和删除接见控制列表,Oracle供给了DBMS_NETWORK_ACL_ADMIN和DBMS_NETWORK_ACL_UTILITY步伐见原许从PL/SQL治理接见控制列表,这些API即是本文的主角。
创建一个接见控制列表(ACL)
接见控制列表是哄骗DBMS_NETWORK_ACL_ADMIN步伐包来操纵的,CREATE_ACL存储历程哄骗下面的参数来创建一个新的接见控制列表:
acl - 接见控制列表XML文件的名字,孕育产生在XML DB 数据库中的/sys/acls目次下
description - 接见控制列表的描写信息
principal - 第一个被赋予或拒绝的用户账号,巨细写敏感
is_grant - TRUE意味着赋予了权限,FALSE意味着权限被拒绝
privilege - 给UTL_TCP, UTL_SMTP, UTL_MAIL和UTL_HTTP赋予connect权限,给UTL_INADDR称号/ip分化赋予resolve权限,巨细写敏感
start_date - 默许值是NULL,当指定了一个值后,接见控制列表只要在指定的日期到达时或到达后才被激活
en_date - 接见控制列表终了日期(可选的)
下面的代码创建了两个测试用户充当委托人,然后又创建了一个新的接见控制列表。
CONN sys/password@db11g AS SYSDBA CREATE USER test1 IDENTIFIED BY test1; GRANT CONNECT TO test1; CREATE USER test2 IDENTIFIED BY test2; GRANT CONNECT TO test2; BEGIN DBMS_NETWORK_ACL_ADMIN.create_acl ( acl => 'test_acl_file.xml', description => 'A test of the ACL functionality', principal => 'TEST1', is_grant => TRUE, privilege => 'connect', start_date => SYSTIMESTAMP, end_date => NULL); COMMIT; END; /
一旦创建终了,接见控制列表就可以在http://host:port/sys/acls目次下看到。
哄骗ADD_PRIVILEGE存储历程将其他的用户或角色添加到接见控制列表中,它的参数与CREATE_ACL存储历程的参数相似,省略了DESCRIPTION参数,同时增进了POSITION参数,它用于设置优先按次。
BEGIN DBMS_NETWORK_ACL_ADMIN.add_privilege ( acl => 'test_acl_file.xml', principal => 'TEST2', is_grant => FALSE, privilege => 'connect', position => NULL, start_date => NULL, end_date => NULL); COMMIT; END; /
每个委托人在接见控制列表中都被作为一个自力的接见控制单位(ACE)中断定义,当定义了多条准绳时,他们遵照从上到下的按次被评价,直到最初一条定义权限的准绳,这就意味着一个拒绝接见某个资源的角色可以被赋予一个用户,然则假设这个用户又作为一个委托人定义在文件中时,这个定义将掩饰角色的定义,哄骗POSITION参数保证权限是按按次中断评价的。
哄骗DELETE_PRIVILEGE存储历程移除权限,假设IS_GRANT或PRIVILEGE参数的值是NULL,将移除全部赋予的权限。
BEGIN DBMS_NETWORK_ACL_ADMIN.delete_privilege ( acl => 'test_acl_file.xml', principal => 'TEST2', is_grant => FALSE, privilege => 'connect'); COMMIT; END; /
哄骗DROP_ACL删除接见控制列表
BEGIN DBMS_NETWORK_ACL_ADMIN.drop_acl ( acl => 'test_acl_file.xml'); COMMIT; END; /
版权声明: 原创作品,容许转载,转载时请务必以超链接体式格式标明文章 原始来由 、作者信息和本声明。不然将追查法令责任。