作者: 黄永兵 来由: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; /
版权声明: 原创作品,许可转载,转载时请务必以超链接形式标明文章 原始来由 、作者信息和本声明。否则将究查法则责任。