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

本文介绍了在Oracle11g及以上版本中遇到ORA-24247问题的原因,即安全升级后需对DBMS_NETWORK_ACL_ADMIN包进行授权。文章详细步骤包括创建ACL、添加用户权限、分配主机访问权限以及提交操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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   => 'LMSYS',
                                    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_TCP, UTL_HTTP, UTL_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; 

--由于发邮件时我指定的是IP,而不是hostname,所以第二步就不需要做了。

--第三步,授权从某主机上可以访问。host支持IP或主机名,并支持通配符*,指定主机名时要注意大小写是敏感的。
begin

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

--最后一步,提交
commit;

https://www.cnblogs.com/ianxu/p/10417833.html

### ORA-12546 TNS Permission Denied 解决方案 当遇到 `ORA-12546: TNS:permission denied` 错误时,这通常意味着操作系统级别的权限不足或配置不当。以下是详细的解决方案: #### 1. 检查并调整文件和目录权限 确保 Oracle 安装路径及其子目录具有正确的权限设置。对于 Linux 系统,建议将 Oracle 软件安装目录的属主设为 oracle 用户,并赋予适当读写执行权限。 ```bash chown -R oracle:oinstall /u01/app/11.2.0/grid/ chmod -R 755 /u01/app/11.2.0/grid/ ``` #### 2. 验证环境变量配置 确认 `.bash_profile` 或者其他 shell 初始化脚本中已正确设置了必要的环境变量,如 `ORACLE_HOME`, `PATH` 和 `LD_LIBRARY_PATH`. ```bash export ORACLE_HOME=/u01/app/11.2.0/grid export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LIBRARY_PATH=$LD_LIBRARY_PATH source ~/.bash_profile ``` #### 3. 修改 SQL*Net 参数 在 `/u01/app/11.2.0/grid/network/admin/sqlnet.ora` 文件中,可以尝试禁用节点验证或将邀请列表扩展到允许更多 IP 地址访问[^1]. ```plaintext TCP.VALIDNODE_CHECKING=no # or adjust the list of allowed IPs if VALIDNODE_CHECKING is set to yes TCP.INVITED_NODES=(...) ``` #### 4. 排除操作系统兼容性问题 有时该错误可能是由于操作系统与 Oracle 版本不匹配引起的。确保正在使用的 OS 是官方支持的操作系统版本之一,并考虑升级至最新补丁集以获得更好的稳定性和支持[^4]. #### 5. 使用管理员模式启动客户端工具 如果是在 Windows 平台上操作,则可能需要通过右键点击命令提示符或其他 Oracle 工具(例如 SqlPlus),选择“以管理员身份运行”。这样可以在更高特权级别下执行连接请求[^2]. #### 6. 检查防火墙和其他安全软件 某些情况下,本地或网络上的防火墙可能会阻止正常的数据库通信。临时关闭这些防护措施来测试是否能解决问题;如果是的话,请相应地更新规则以便长期稳定工作. 以上方法可以帮助排除大多数由权限引起的问题。然而,在实际环境中还需要结合具体情况进一步排查潜在原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值