Bootstrap

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

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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29867/viewspace-1063530/

;