今天切换到Oracle11g下后,接着使用UTL_TCP与服务程序进行数据交互时,居然报出个ACL访问控制的问题,幸亏以前还有过些网络的基础
今天切换到Oracle11g下后,接着使用UTL_TCP与服务程序进行数据交互时,居然报出个ACL访问控制的问题,幸亏以前还有过些网络的基础,还知道ACL是个什么东西,,
而在Oracle11g下为了加强网络访问的安全性,对ACL进行了一个软的实现。下面就如何突破ACL这一层,进行了Oracle有关DBMS_NETWORK_ACL_ADMIN进行调研,下面是一些总结:
--ACL使用调研
关于让DBCoffer有关执行权限参考如下:
--用来获取主机IP或主机名
BEGIN
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => 'coffer_acl_file.xml',
description => 'A test of the ACL functionality',
--参数为:一个用户或者是一个角色
principal => 'COFFER',
is_grant => TRUE,
privilege => 'resolve'
--start_date => SYSTIMESTAMP,
--end_date => NULL
);
COMMIT;
END;
/
--让用户能够访问外网的相关端口与IP
BEGIN
DBMS_NETWORK_ACL_ADMIN.add_privilege (
acl => 'coffer_acl_file.xml',
--参数为:一个用户或者是一个角色
principal => 'COFFER',
is_grant => TRUE,
privilege => 'connect'
--position => NULL,
--start_date => NULL,
--end_date => NULL
);
COMMIT;
END;
/
--对这个访问控制列表指定一条规则
BEGIN
DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl => 'coffer_acl_file.xml',
host => '*');
COMMIT;
END;
/
--当升级一个DBCoffer用户时需要执行
BEGIN
DBMS_NETWORK_ACL_ADMIN.add_privilege (
acl => 'coffer_acl_file.xml',
--参数为:一个用户或者是一个角色
principal => 'TEST',
is_grant => TRUE,
privilege => 'resolve'
--position => NULL,
--start_date => NULL,
--end_date => NULL
);
COMMIT;
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.add_privilege (
acl => 'coffer_acl_file.xml',
--参数为:一个用户或者是一个角色
principal => 'TEST',
is_grant => TRUE,
privilege => 'connect'
--position => NULL,
--start_date => NULL,
--end_date => NULL
);
COMMIT;
END;
/
--当撤销一个DBCoffer用户时,需要执行
BEGIN
DBMS_NETWORK_ACL_ADMIN.delete_privilege (
acl => 'coffer_acl_file.xml',
--参数为:一个用户或者是一个角色
principal => 'TEST',
is_grant => TRUE,
privilege => 'resolve');
COMMIT;
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.delete_privilege (
acl => 'coffer_acl_file.xml',
--参数为:一个用户或者是一个角色
principal => 'TEST',
is_grant => TRUE,
privilege => 'connect');
COMMIT;
END;
--删除一个访问控制列表
BEGIN
DBMS_NETWORK_ACL_ADMIN.drop_acl (
acl => 'coffer_acl_file.xml');
COMMIT;
END;
/