oracle 认证方式
oracle认证方式分为操作系统认证和口令文件认证2种方式,操作系统认证有时候也叫本地认证。这2种认证我是这么理解的:
--操作系统认证:
即oracle认为操作系统用户是可靠的,即既然能登陆到操作系统那么oracle数据库你也能登陆
--口令文件认证:
oracle认证认为操作系统用户是不可信任的,如果要访问数据库,必须进行再次认证。
具体实现如下:
--操作系统认证:
配置a文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NTS)
spfile(pfile)文件参数: REMOTE_LOGIN_PASSWORDFILE=('NONE')
--口令文件认证:
配置a文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NONE)
spfile(pfile)文件参数: REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED')
这个时候需要配置口令文件a。(orcl为数据库SID)
select * from v$pwfile_users;
一、sysdba的权限
sysdba(sysoper和normal)是登录数据库的身份,与角(dba、resource)、对象权限及系统权限有所区别,登录身份表明了可对数据库的整体进行哪些操作,sysdba有些类似unix下的root帐户。
sysdba的权限或可对数据库进行的操作:
startup,shutdown
alter database open|mount
alter database backup controlfile
alter tablespace begin/end backup
recover database
alter database archivelog,restricted session
create database
recover database until
二、os认证和口令文件认证
1、os认证和口令文件认证其实质是对oracle数据库采取何种管理方式,是本地管理还是通过一台管理服务器统一管理。
本地管理采用的就是os认证方式,统一管理采用的就是口令文件认证方式
2、两种认证的实现
oracle数据库通过a文件中的参数 SQLNET.AUTHENTICATION_SERVICES,PFILE(或SPFILE)文件中的参数 REMOTE_LOGIN_PASSWORDFILE和口令文件a三者协同作用实现身份认证。
SQLNET.AUTHENTICATION_SERVICES=(NTS)|(NONE)
SQLNET.AUTHENTICATION_SERVICES=(NTS): 操作系统认证方式,不使用口令文件
SQLNET.AUTHENTICATION_SERVICES=(NONE):口令文件认证方式
REMOTE_LOGIN_PASSWORDFILE=(NONE)|(EXCLUSIVE)|(SHARED)
REMOTE_LOGIN_PASSWORDFILE=(NONE):不使用口令文件,操作系统认证
REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE):口令文件认证方式,但只有一个数据库实例可以使用此文件,
系统允许将SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户,且以具有这类身份的其他用户登录是有效的
REMOTE_LOGIN_PASSWORDFILE=(SHARED):口令文件认证方式,可有多个数据库实例使用此文件,但是此设置下
只有INTERNAL/SYS帐号能被识别,即使文件中存有其他用户的信息,也不允许他们以SYSOPER/SYSDBA登录
1)SQLNET.AUTHENTICATION
_SERVICES=(NTS)同时REMOTE_LOGIN_PASSWORDFILE=(NONE),此时为操作系统认证方式。
当以oracle_dba组下的用户登录进入本地windows2000后进行下边的操作:
sqlplus /nolog
sql>conn /as sysdba
sqlplus /nolog
sql>conn 任意用户名/密码 as sysdba
均可以sysdba身份登录成功,进行数据库方面的操作
当以远程进行登录时,执行
sqlplus /nolog
sql>conn /as sysdba
sqlplus /nolog
sql>conn sys/密码 as sysdba
均显示
“ERROR:
ORA-01031: insufficient privileges
也就是不允许以sysdba身份远程登录系统,这也是os认证之所以也称为本地认证方式的原因
2)SQLNET.AUTHENTICATION_SERVICES=(NONE)同时REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE)或(SHARED),配合口令文件
当在本地以oracle_dba组下的用户登录进入windows2000后进行下边的操作:
sqlplus /nolog
sql>conn /as sysdba
显示
“ERROR:
ORA-01031: insufficient privileges
实质上是要求提供拥有sysdba身份的用户名和密码
在本地或远程进行下边的操作
sqlplus "sys/密码@服务名 as sysdba"
可进入系统
也就是说口令文件认证方式允许用户从本地或远程以sysdba身份登录,但必须提供口令字
3)SQLNET.AUTHENTICATION_SERVICES=(NTS)同时REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE)或(SHARED),配合口令文件a,此时操作系统认证和口令文件认证同时起作用
当在本地以oracle_dba组下的用户登录进入windows2000后进行下边的操作:
为什么oracle网站进不去sqlplus /nolog
sql>conn /as sysdba
可进入系统
当在远程执行
sqlplus "sys/密码@服务名 as sysdba"
同样可正常登录到数据库系统上
上边的参数配置容易令人迷惑、混淆,造成假象。我推测网上有些朋友所以对身份认证产生费解可能就是因为这么
配置参数的!
三、其他
从前边的讨论可以知道,我们能够对sys以外的用户赋予sysdba身份,具体方法就是
SQLNET.AUTHENTICATION_SERVICES=(NONE)
REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE)
口令文件a
SQL>grant sysdba to 用户名
这样,其他具有sysdba身份的用户就加入到a中,并可以被a识别,我们可以用这个被赋予sysdba身份的用户登录并进行类似sys用户下所能执行的操作 
NONE 
Oracle ignores any password file. Therefore, privileged users must be authenticated by the operating system.
SHARED 
More than one database can use a password file. However, the only user recognized by the password file is SYS.
EXCLUSIVE 
The password file can be used by only one database and the password file can contain names other than SYS
==============================================================================================
ORACLE数据库通过a文件中
的参数sqlnet.authentication_services,参数文件中的remote_login_passwordfile和口令文件a三者协同作用实现身份认证.
Sqlnet.authentication_services=(NTS)|(NONE)
NTS:操作系统认证方式,不使用口令文件;
NONE:口令文件认证方式
Remote_login_passwordfile=(NONE)|(EXCLUSIVE)|(SHARED)
NONE:不使用口令文件,操作系统认证;
EXCLUSIVE:口令文件认证方式,但只有一个数据库实例可以使用此文件;
SHARED:口令文件认证方式,可以有多个数据库实例可以使用此文件,但此设置下只有SYS帐号能被识别,即使文件中存在其他用户的信息,也不允许他们以SYSOPER/SYSDBA登录.
(1).sqlnet.authentication_services=(NTS)
同时Remote_login_passwordfile=(NONE),此时为操作系统认证方式.
当以oracle_dba组下的用户登录进入本地的操作系统后,进行以下操作:
sqlplus /nolog
SQL>conn /assysdba
可以以sysdba身份登录成功,进行数据库方面的操作.
当以远程进行登录时,执行:
sqlplus /nolog
SQL>conn /assysdba
则会显示:
ERROR:ORA-01031:insufficient privileges
即不允许以sysdba身份远程登录系统,这也是OS认证这所以称为本地认证方式的原因.
(2).Sqlnet.authentication_services=(NONE),同时
Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令文件a,此时为口令文件认证方式:
当在本地以oracle_dba组下的用户登录进入系统时,进行以下操作:
sqlplus /nolog
SQL>conn /assysdba
则会显示:
ERROR:ORA-01031:insufficient privileges
在本地或远程进行下边的操作:
sqlplus /nolog
SQL>conn sys/密码@服务名assysdba
可以进入系统,也就是说口令文件认证方式允许用户从本地或远程以sysdba身份登录,但必须提供口令字.
(3).Sqlnet.authentication_services=(NTS),同时
Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令文件a,此时为操作系统认证和口令文件认证同时起作用:
当在本地以oracle_dba组下的用户登录进入操作系统后,进行下边的操作:
sqlplus /nolog
SQL>conn /assysdba
可以进入系统.即操作系统认证方式登录成功.
当在远程执行:
sqlplus /nolog
SQL>conn sys/密码@服务名assysdba
同时可正常登录到数据库系统,即口令文件认证方式登录成功.
附:
要知道以下几种登陆方式不是一种概念
sqlplus /nolog
1: conn /assysdba                    本机登陆,使用操作系统认证,有无监听都可以
2: conn sys/password assysdba  本机登陆,使用密码文件认证,有无监听都可以
3: conn sys/password@dbanote assysdba 可以本机可以远程,使用密码文件认证,必须有监听,必须有a,remote_login_passwordfile必须是EXCLUSIVE
说明:
从oracle的解释可以知道,SQLNET.AUTHENTICATION_SERVICES=(NTS)是WINDOWS系统专用的,对linux/UNIX是不适用的。
最后做一个简单的总结:
1
、在windows下,SQLNET.AUTHENTICATION_SERVICES必须设置为NTS或者ALL才能使用OS认证;不设置或者设置为其他任何值都不能使用OS认证。
2、在linux下,在SQLNET.AUTHENTICATION_SERVICES的值设置为ALL,或者不设置的情况下,OS验证才能成功;设置为其他任何值都不能使用OS认证。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。