2014-02-19 48 views
1

在RedHat 6服务器上,第三方应用程序需要以root身份运行并需要访问sqlplus。我有一个正在运行的数据库,我可以以用户'oracle'的身份运行sqlplus。以root用户身份登录时,'sqlplus usr/pwd @ dbname'按预期工作。麻烦的是,这个代理需要运行没有参数的sqlplus,它总是返回ORA-12546:TNS:permission denied。如何配置Oracle 11g启动sqlplus?

我已经读了十几次,让root启动Oracle是一个安全问题,但我真的没有别的选择。

运行Oracle 11.2.0.1.0。

任何帮助将非常感谢,因为我google了两天没有成功。

+0

你还没有说过你试过的东西,所以这可能会重复。据推测,你有环境变量('ORACLE_HOME','TNS_ADMIN','ORACLE_SID' ...)设置正确,或者我认为你会看到不同的错误。您是否正在使用完整的Oracle安装,并且在您的'ORACLE_HOME'中有没有什么奇怪的权限?我建议你有一个单独安装的“root”即时客户端用于保持尽可能多的分离 - 这是可行的吗? –

+0

我拥有与oracle用户完全相同的环境变量。是的,它是一个标准的Oracle Oracle安装。我检查了另一台按预期运行的服务器的权限和所有权,但找不到差异,所以我怀疑它与某个配置有关。不幸的是,在这种情况下不可能为root安装一个单独的客户端。我觉得这是监听器配置的问题,远远超过数据库。感谢您的调查,迄今。 – PierreVn

+0

是的,我只是启动sqlplus并依靠ORACLE_SID。我没有配置任何钱包,也许有默认配置?运行正常的系统使用Oracle 11.1.0.6,而不是使用11.2.0.1。 TWO_TASK未在任一系统上设置。在两个系统上找不到任何差别。我还没有告诉它,但从用户root,'tnsping dbname'正确答案!我很困惑! – PierreVn

回答

1

From the documentation,ORA_12546是:

ORA-12546:TNS:许可被拒绝
原因:用户没有足够的权限来执行所请求的操作。 操作:获得必要的权限并重试。

这是完全没有任何帮助,但各种论坛和博客(太多的链接,谷歌搜索的错误显示了很多类似的意见)提上安装,$ORACLE_HOME/bin/oracle的特定部分的权限,这是大多数服务的关键和核心部分。

通常在该文件的权限将-rws-r-s--x,与oracle:dba拥有的文件,并在字写的标志,可能会发生这个错误 - 在这种模式最终x - 未设置。 dba群组中的任何人都仍然可以执行此操作,但外面的人不会。

您的监听器似乎很好,因为您可以通过在连接字符串中指定@dbname进行远程连接。侦听程序的运行方式为oracle(通常,可能为带有HA,RAC或ASM的grid),因此它位于dba组中,并且可以愉快地将连接切换到oracle可执行文件的实例。

当您不通过侦听器连接时,您必须能够自己执行该文件。看来root不能执行它(或者可能是其他文件,但通常这是罪魁祸首,显然),这意味着世界可写位实际上没有设置。

至于我可以看到你有三种选择:

  • 集世界可写位,与chmod o+x $ORACLE_HOME/bin/oracle;但是这为每个人开放了权限,并且可能他们因为某种原因受到了限制;
  • root加到dba组,通过usermod/etc/group;这也可能削弱安全性;
  • 即使未在连接字符串中指定@dbname,也可以通过在root环境中添加export TWO_TASK=dbname来使用SQL * Net。

你说你在另一台服务器上没有这个问题,而且文件权限是一样的;在这种情况下,root可能位于该框上的dba组中。但我认为第三种选择似乎是最简单和最安全的。我想还有第四个选项,要安装一个单独的instant client,但是你必须设置TWO_TASK,并且通过SQL * Net,并且你已经排除了这一点。

我不会纠缠于它是否运行为rootsqlplus(需要它或者实际上的应用程序)是一个好主意,但是会提到,你可能有一个脚本或函数调用sqlplus切换到一个通过su运行真实可执行文件的特权较低的帐户,并且可能对应用程序透明。除非您切换到oracle帐户,但这也不是一个好主意,您将拥有相同的权限问题和选项。

+0

这就是我所说的一个非常明确的解释。我首先尝试了TWO_TASK设置,现在它完美地工作。顺便说一下,我想检查oracle bin的权限,他们很好-rws-r-s -x。无论如何,非常感谢您的帮助!我的名声不够高,无法给你一分,或者我会感激。 – PierreVn

+0

@PierreVn - 很高兴的工作;可能构成'$ ORACLE_HOME/bin'的路径中的目录具有750('drwx-rx ---')的权限,但不确定是否确实发生了该错误。还有一个访问控制列表。所有这些与TWO_TASK无关,但总是很有趣,知道怎么回事,而不仅仅是如何解决它。 –

+0

我认为我值得一对滑动:我没有检查除/ home/oracle(安装在下面的Oracle),这是700的子目录的权限!我将它修改为755,在shell会话中删除了TWO_TASK,再次尝试了sqlplus,猜测它是什么:它也可以。对我感到羞耻! – PierreVn