【问题标题】:TNS:permission denied : ORA-12546 in RHEL 8TNS:权限被拒绝:RHEL 8 中的 ORA-12546
【发布时间】:2022-08-10 02:34:00
【问题描述】:

我在 PHP 中创建了一个数据库连接测试以连接到远程 oracle 数据库。但它会抛出类似的错误

      Failed to connect to Oracle
      Array ( [code] => 12546 [message] => ORA-12546: TNS:permission denied [offset] => 0 [sqltext] => )


      **CODE**

$db = \"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1567))(CONNECT_DATA=(SERVICE_NAME=servicename)))\";     
$conn=oci_connect(\"username\",\"pwd\",$db);

If (!$conn)
    echo \'Failed to connect to Oracle\';
 
else
    echo \'Succesfully connected with Oracle DB\';
 $e = oci_error();   // For oci_connect errors pass no handle
 oci_close($conn);

Oracle 即时客户端路径/usr/lib/oracle/19.11/client64/lib

oci8 路径/usr/lib64/php/modules/oci8

有什么线索可以解决这个错误吗?

很少的信息

       Installed packages
       PHP 7.2
       php-ldap
       php-cli
       php-gd
       php-pear 
       php-odbc
       php-common 
       php-xml
       php-pdo
       php-process
       php-mbstring
       oci8
       oracle-instantclient-19.11
       oracle-instantclient-devel-19.11
       oracle-instantclient-sqlplus-19.11
       

所有这些包都在远程服务器上。我还没有设置任何变量,但是我给了 oracle-instantclient lib oci8.so 文件 755 权限。

  • 您可以使用有关您安装的内容和位置的信息更新您的问题吗? PHP 是在远程计算机上还是与数据库在同一台计算机上?您的连接字符串是什么格式 - 它是一个简单的名称(即网络别名),还是完整的连接描述符(带有很多括号),或者它是 \'Easy Connect\' 语法(如 \"my_hostname/my_service_name \")?您的 PHP 进程是否对 tnsnames.ora 文件具有读取权限?您设置了哪些 Oracle 环境变量,如 ORACLE_HOME、TNSADMIN 等?
  • @ChristopherJones 你好,我在我的问题中添加了更多细节。你能调查一下吗。
  • 任何东西都可以连接到那个远程数据库吗? SQL*Plus 是否连接?
  • SQL Plus 也无法连接
  • 从谷歌搜索来看,这听起来像是数据库方面的问题。请与您的 DBA 确认 Oracle 网络侦听器已正确启动,并且实际上可以访问 DB 软件安装中的 tnsnames.ora 文件。

标签: php linux oracle oci8 rhel8


【解决方案1】:

我在这个路径 ORACLE_HOME/network/admin 中添加了 tnsnames.ora。添加了以下连接字符串,瞧,它对我有用

      (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1567))(CONNECT_DATA=(SERVICE_NAME=servicename)))

这个解决方案帮助我解决了这个问题。也许它也会帮助你。

【讨论】:

    【解决方案2】:

    当 SELinux 服务在您的 Linux 服务器上处于活动状态时,Apache 服务器无法连接到在服务器之外运行的服务。因此,您必须通过执行以下命令来更改此配置:

        setsebool -P httpd_can_network_connect on
    

    这个命令帮助我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2015-12-12
      • 1970-01-01
      • 2013-07-10
      • 2018-06-11
      • 2015-08-30
      • 1970-01-01
      • 2015-08-08
      相关资源
      最近更新 更多