Chinaunix首页 | 论坛 | 博客
  • 博客访问: 511777
  • 博文数量: 158
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 904
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-10 11:17
文章分类

全部博文(158)

文章存档

2018年(74)

2017年(84)

我的朋友

分类: Oracle

2017-12-19 17:40:51

【摘要】

    在使用sqlplus登录数据库时,有时会出现无法登录的现象,很大程度的原因是在登录方式的配置上被修改了。这里主要介绍Oracle在linux环境下通过操作系统认证和口令文件认证登录的区别及其配置方法。

 

     登录认证方式简介

Oracle登录认证有两种方式,一种是基于操作系统的登录认证,另外一种是基于口令文件的登录认证。我们经常使用的sqlplus / as sysdba登录,不需要输入用户密码,就是属于操作系统的认证。可以通过改变sqlnet.ora文件,可以修改登录认证方式。

 

         sqlnet.ora文件配置

sqlnet.ora是位于$ORACLE_HOME/network/admin目录下的一个配置文件,用于指定oracle对连接字符串的解析方式,一般只包含一个参数即SQLNET.AUTHENTICATION_SERVICES,不同于windows系统,赋值NTS对Linux是不适用的(在windows环境下,SQLNET.AUTHENTICATION_SERVICES=(NTS) 表示采用操作系统本地认证方式)。

在linux环境下,在SQLNET.AUTHENTICATION_SERVICES的值设置为ALL,或者不设置的情况下,OS验证才能成功;设置为其他任何值都不能使用OS认证。

具体实验如下:

1.      SQLNET.AUTHENTICATION_SERVICES=NONE或其它任何值:

使用sqlplus / as sysdba报错:ORA-01031: insufficient privileges

此时不能使用操作系统认证方式,但可以使用口令文件的登录认证:

sqlplus user/password 或者 sqlplus user/password@service_names

2.      SQLNET.AUTHENTICATION_SERVICES=ALL

关闭本机密码文件认证,使用操作系统认证,但远程<异机>可以使用密码文件认证,这里可以使用sqlplus user/password登录,但如果使用sqlplus user/password@service_names,则会报错:

ORA-12641: Authentication service failed to initialize

此时无法通过service_names的方式连接。

3.      SQLNET.AUTHENTICATION_SERVICES= (等于空,不赋值)

       作用相当于把sqlnet.ora整个文件删除,此时所有登陆方式均可以用。

 

         REMOTE_LOGIN_PASSWORDFILE参数设置

该参数在Oracle数据库实例的初始化参数文件中,控制着密码文件的使用及其状态,即使用口令文件认证登录时,会受到该参数的影响。

Oracle的口令文件也叫密码文件,用于存放用户的密码,存放目录为$ORACLE_HOME/dbs/orapw,则该参数有三个值:

1.      none:不使用密码文件认证。

2.      exclusive:默认参数值,要密码文件认证,但只有一个数据库实例可以使用该文件。

3.      shared:口令文件认证方式,可有多个数据库实例使用此文件,但是此设置下,只有INTERNAL/SYS帐号能被识别,即使文件中存有其他用户的信息,也不允许他们以SYSOPER/SYSDBA登录

实验:将REMOTE_LOGIN_PASSWORDFILE的值修改为none

SQL> alter system set remote_login_passwordfile=none scope=spfile;

注意:这个参数不是动态参数,修改以后需要重新启动数据库才能够生效。

修改完成后,可以正常OS认证登录,可以使用口令文件登录,但不可以远程以SYSDBA身份登陆,该现场与缺失口令文件的情况一致,报错如下:

[oracle@localhost dbs]$ sqlplus sys/oracle@orcl as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Jan 5 21:11:02 2015

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:

ORA-01031: insufficient privileges

         小结

1、在发现登录失败时,尝试多种登录方式以确定原因;

2、不轻易修改数据库的默认配置,任何参数修改的操作都要有操作记录;

3、windows环境与linux不同,相比之下linux的登陆配置很简单。

4、如果丢失了口令文件,可通过下述方法重建(linux环境下):

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password='' entries=n force=y

(其中entries参数表示这个密码文件最多可以支持多少个sysdba/sysoper用户,force=y表示允许覆盖)


阅读(1486) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~