(轉載地址:http://blog.csdn.net/liaojiabo/article/details/6627065)
今天切換到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;
/