问题一: 刚刚安装完毕Oracle之后,尝试sqlplus登陆报错,TNS:net service name is incorrectly specified
参考文章:关于环境变量ORACLE_SID简单谈下
说明:环境变量ORACLE_SID未设置正确,将环境变量ORACLE_SID设置为之前安装的数据库实例名即可;export只是当前会话环境变量生效,修改文件 .bash_profile即可
假设环境变量ORACLE_SID没有设置对,数据库实例不存在,会报这样错误:
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/data/app/oracle/product/dbhome_1/dbs/initolcom115DB.ora'
问题二.Linux conn sys as sysdba 即使不输入密码、密码输入错误也能登陆进入SYS用户;或者 conn / as sysdba 可以直接登陆数据库不用输入密码
在同事的机器Windows上测试,发现Oracle同样不需要密码、密码错误也可以登陆SYS用户;
说明:这属于操作系统级别的认证方式,Linux下用户为Oracle(我觉得属于 数据库DBA组 的用户)的用户以SYSDBA登陆数据库不验证密码正确性;
Windows下取消操作系统认证方式:
修改$ORACLE_HOME/network/admin目录下的sqlnet.ora文件
SQLNET.AUTHENTICATION_SERVICES= (NTS)
改为如下即可,在同事的机器上发现不用重启数据库就能生效;
SQLNET.AUTHENTICATION_SERVICES= (NONE)
Linux下取消操作系统认证方式:
我在linux下没有找到该sqlnet.ora文件,通过验证,我得出的结论是,操作系统认证 不验证用户以SYSDBA方式登陆时候的密码正确性,只有在当前用户归属于数据库DBA组的时候;
Redhat6.8安装Oracle11gR2 这是我之前记录的安装Oracle的过程,其中安装过程中指定了两个数据库DBA组 dba 以及普通用户组oinstall
新增一个用户,归属于 oinstall组,测试结果如下:
将其用户组改为dba组,命令 usermod –G dba lbb
结论,linux下操作系统认证 用户为数据库dba组才有权限 无视密码 直接conn / as sysdba登陆,这也是为啥有时候用户登陆不需要密码也能SYSDBA登陆数据库,所以Oracle安装时候还是指定两个用户组;linux下的sqlnet.ora文件我没发现哪里有。
问题三. linux其他用户登陆Oracle时候lost contact问题:
解决方案:到$ORACLE_HOME/bin目录下执行 chmod 6751 oracle 或者 chmod +s oracle 命令即可;
非Oracle用户lost contact解决方案 非Oracle用户lost contact解决方案2