ORA-24247:network access denied by access control list (ACL) 的處理方法

lastwinner發表於2013-12-18

ORA-24247 在11g及以上版本會碰到此問題。這是因為Oracle在安全方面做了升級,導致要對一些系統包的使用前需要先獲得授權,而這個授權不是簡簡單單的透過grant就可以完成的。

下面舉例說明問題的解決步驟和思路,需要用到的包為 DBMS_NETWORK_ACL_ADMIN,需要DBA許可權去執行
——————————————————————————————————————————————————————————
--首先,如果不存在訪問控制檔案,那麼就建立一個
--如果已經有了,那麼就忽略這一步,除非你想有序化進行管理,那麼就重新建立一個
begin
 DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl         => 'Resolve_Access.xml',
                                    description => 'Resolve Access',
                                    principal   => 'SCOTT',
                                    is_grant    => true,
                                    privilege   => 'connect');
end;

--其次,為某個SCHEMA增加訪問許可權,許可權分resolve和connect兩種(必須全小寫),需要根據具體使用的包來確定
--具體的,is_grant的說明說得很清楚了
/*
Network privilege to be granted or denied - 'connect | resolve' (case sensitive). A database user needs the connect privilege to an external network host computer if he or she is connecting using the UTL_TCPUTL_HTTPUTL_SMTP, and UTL_MAIL utility packages. To resolve a host name that was given a host IP address, or the IP address that was given a host name, with the UTL_INADDR package, grant the database user theresolve privilege.
*/
begin
 DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl       => 'Resolve_Access.xml',
                                       principal => 'SCOTT',
                                       is_grant  => true,
                                       privilege => 'resolve');
end;

--第三步,授權從某主機上可以訪問。host支援IP或主機名,並支援萬用字元*,指定主機名時要注意大小寫是敏感的。
begin

DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl  => 'Resolve_Access.xml',
                                    host => '*');
end;

--最後一步,提交
commit;

——————————————————————————————————————————————————————————

以上展示瞭如何建立資原始檔、新增許可權到資原始檔,最後授權主機訪問的過程,最後記得一定要提交。
更多的,請參考官方文件中關於DBMS_NETWORK_ACL_ADMIN的部分

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29867/viewspace-1063530/,如需轉載,請註明出處,否則將追究法律責任。

相關文章