在一个RedHat 6服务器,第三方应用程序需要以root身份运行,并且需要sqlplus的访问。 我有一个运行的数据库,我可以为用户“ORACLE”的sqlplus运行。 当登录的用户root,“sqlplus的USR /密码@ DBNAME”按预期工作。 麻烦的是,这个代理需要运行不带参数的sqlplus,它总是返回ORA-12546:TNS:许可被拒绝。
我读了十几遍,启用根推出Oracle是一个安全问题,但我真的没有其他选择。
运行Oracle 11.2.0.1.0。
任何帮助将非常感激,因为我GOOGLE了2天,但没有成功。
从文档 ,ORA_12546是:
ORA-12546:TNS:许可被拒绝
原因:用户没有足够的权限来执行所请求的操作。 动作:获取必要的权限,然后再试一次。
这是完全没有任何帮助,但各种论坛和博客(太多的链接,谷歌搜索的错误显示了很多类似的意见)提上安装的特定部分的权限, $ORACLE_HOME/bin/oracle
,这是大多数服务的关键和核心部分。
通常情况下对文件的访问权限是-rws-rs--x
,与所拥有的文件oracle:dba
,当字写的标志,可能会发生这个错误-最后x
在这种模式-没有设置。 任何人在dba
组将仍然能够执行它,但外面那些不会。
你的听众似乎是罚款,你可以远程连接,通过指定@dbname
在连接字符串。 听者运行作为oracle
(通常,可能是grid
与HA,RAC或ASM),所以它是中dba
组和可以快乐地越区切换连接到的一个实例oracle
可执行文件。
当您连接,而不通过听者去,你必须要能够执行该文件自己。 看来, root
无法执行它(或可能是一些其他的文件,但是这通常是罪魁祸首,显然),这意味着世界上可写位确实没有设置。
至于我可以看到你有三种选择:
- 集世界可写位,以
chmod o+x $ORACLE_HOME/bin/oracle
; 但它开创了每个人的权限,想必他们已经受到限制的一个原因; - 添加
root
到dba
基团,经由usermod
或在/etc/group
; 这潜在地削弱安全以及; - 使用SQL *即使你不指定网络
@dbname
在连接字符串,通过增加export TWO_TASK=dbname
到root
环境。
你说你没有另一台服务器上这个问题,该文件的权限是一样的; 在这种情况下root
可能是在dba
上包厢群。 但我认为第三个选择似乎最简单,最安全的。 还有第四个选项,我想,要安装一个独立的即时客户端 ,但你必须设置TWO_TASK
反正去了SQL * Net和你已经排除了这种可能性。
我不会纠缠于它是否运行一个好主意sqlplus
(或实际上需要它的应用程序)为root
,而只是提到,你可能有一个脚本或函数调用sqlplus
切换到具有较少特权的帐户通过su
运行真正的可执行文件,这可能是对应用程序透明。 除非你切换到oracle
帐户,虽然,这也不是一个好主意,你有相同的权限问题和选项。