如何配置Oracle 11g以启动sqlplus?

时间:2014-02-19 08:45:59

标签: oracle11g root sqlplus

在RedHat 6服务器上,第三方应用程序需要root才能运行并且需要访问sqlplus。我有一个正在运行的数据库,我可以用'oracle'运行sqlplus。以root用户身份登录时,'sqlplus usr / pwd @ dbname'按预期工作。麻烦的是这个代理需要运行没有参数的sqlplus,它总是返回ORA-12546:TNS:权限被拒绝。

我已经阅读了十几次,让root用户启动Oracle是一个安全问题,但我别无选择。

运行Oracle 11.2.0.1.0。

任何帮助都会非常感激,因为我用Google搜索了2天但没有成功。

1 个答案:

答案 0 :(得分:1)

From the documentation,ORA_12546是:

  

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

哪个不完全有用,但各种论坛和博客帖子(链接太多,谷歌搜索错误显示了很多类似的建议)提到了安装的特定部分的权限,$ORACLE_HOME/bin/oracle ,这是大多数服务的关键和核心部分。

通常,该文件的权限为-rws-r-s--x,文件归oracle:dba所有,当字可写标志 - 该模式中的最终x时,可能会发生此错误 - 未设定。 dba组中的任何人仍然可以执行它,但外面的人不会。

通过在连接字符串中指定@dbname,您可以远程连接您的监听器。监听器以oracle运行(通常可以是grid HA,RAC或ASM),因此它位于dba组中,可以愉快地将连接切换到oracle的实例{1}}可执行文件。

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

据我所知,您有三种选择:

  • 使用chmod o+x $ORACLE_HOME/bin/oracle设置全局可写位;但这会为每个人开放权限,并且可能是因为某种原因而被限制;
  • 通过rootdbausermod添加到/etc/group群组;这也可能削弱安全性;
  • 即使未在连接字符串中指定@dbname,也可以使用SQL * Net,方法是将export TWO_TASK=dbname添加到root环境。

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

我不会详述将sqlplus(或者确实需要它的应用程序)作为root运行是否是一个好主意,但是只会提到你可能会有一个脚本或称为sqlplus的函数,通过su切换到权限较低的帐户以运行实际可执行文件,这对应用程序可能是透明的。除非您切换到oracle帐户,这也不是一个好主意,否则您将拥有相同的权限问题和选项。