【问题标题】:How to configure Oracle 11g to launch sqlplus?如何配置Oracle 11g 启动sqlplus?
【发布时间】:2014-03-19 11:18:02
【问题描述】:

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

我已经读过十几遍了,启用 root 启动 Oracle 是一个安全问题,但我真的别无选择。

运行 Oracle 11.2.0.1.0。

任何帮助将不胜感激,因为我已经用谷歌搜索了 2 天但没有成功。

【问题讨论】:

  • 您还没有说出您尝试过的内容,因此这可能会重复。大概您已经正确设置了环境变量(ORACLE_HOMETNS_ADMINORACLE_SID...),或者我认为您会看到不同的错误。您是否使用完整的 Oracle 安装,您的 ORACLE_HOME 中的权限有什么奇怪的吗?我建议您为root 单独安装即时客户端,以尽可能多地保持分离 - 这可行吗?
  • 我的 root 环境变量与 oracle 用户完全相同。是的,它是标准的企业 Oracle 安装。我使用另一台按预期运行但找不到差异的服务器检查了文件权限和所有权,因此我怀疑它与某处的配置有关。不幸的是,在这种情况下无法为 root 安装单独的客户端。我感觉这是监听器配置的问题,远不止数据库。到目前为止,感谢您的调查。
  • 是的,我只是启动 sqlplus 并依赖 ORACLE_SID。我没有配置任何钱包,也许有默认配置?正常工作的系统是在另一个系统上使用 Oracle 11.1.0.6 而不是 11.2.0.1。两个系统上都没有设置 TWO_TASK。在两个系统上比较目录时找不到任何差异。我还没有告诉它,但是从 root 用户,'tnsping dbname' 回答正确!我很困惑!
  • 我知道发生这种情况的唯一方法 - 远程连接正常工作(tnsping dbname 和连接@dname)但本地连接得到该错误是通过权限;特别是当$ORACLE_HOME/bin/oracle 不是世界可执行文件时。但这是谷歌建议的第一件事,你很难过权限匹配工作服务器。你能确认那个特定的标志吗? root 是否在工作服务器上的 dba 组中?

标签: oracle11g root sqlplus


【解决方案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 可执行文件实例的连接。

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

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

  • 设置全局可写位,chmod o+x $ORACLE_HOME/bin/oracle;但这为每个人开放了权限,大概他们受到限制是有原因的;
  • 通过usermod/etc/grouproot 添加到dba 组;这也可能会削弱安全性;
  • 即使您没有在连接字符串中指定@dbname,也可以通过将export TWO_TASK=dbname 添加到root 环境中来使用SQL*Net。

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

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

【讨论】:

  • 这就是我所说的非常清楚的解释。我首先尝试了 TWO_TASK 设置,现在它可以完美运行。顺便说一句,我想检查 oracle bin 的权限,它们很好 -rws-r-s--x。无论如何,非常感谢您的帮助!我的名声还不够高,不能给你一分,否则我会感激不尽的。
  • @PierreVn - 很高兴这有效;可能构成$ORACLE_HOME/bin 的路径中的目录具有750 (drwx-rx---) 权限,但不确定您是否确实收到了该错误。也可能有一个访问控制列表。与TWO_TASK 一样,这一切都有些无关紧要,但知道问题所在总是很有趣,而不仅仅是如何解决问题。
  • 我认为我值得一刷:我确实检查了除 /home/oracle(Oracle 安装在下面)之外的子目录的权限,即 700!我将其修改为 755,在 shell 会话中删除了 TWO_TASK,再次尝试 sqlplus 并猜测:它也可以工作。真丢人!
猜你喜欢
  • 2019-01-30
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2019-05-16
相关资源
最近更新 更多