今天切換到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;
/