Oracle OS认证和口令文件认证的简要解析

关于os认证和口令文件认证(转)
===========================================================




前言

发现有很多人提问数据库身份认证方面的问题,基此就oracle的身份认证做个简要解析,希望这篇文档对遇到类似问题的朋友有所裨益。

文中错误之处请大家指正,不足之处请大家补充!

环境

windows2000+sp4,oracle9.201

oracle软件以oracle帐户安装

一、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数据库通过sqlnet.ora文件中的参数SQLNET.AUTHENTICATION_SERVICES,PFILE(或SPFILE)文件中的参数

REMOTE_LOGIN_PASSWORDFILE和口令文件PWDsid.ora三者协同作用实现身份认证。



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'),配合口令文件

PWDsid.ora,此时为口令文件认证方式

当在本地以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'),配合口令文件

PWDsid.ora,此时操作系统认证和口令文件认证同时起作用

当在本地以oracle_dba组下的用户登录进入windows2000后进行下边的操作:

sqlplus /nolog

sql>conn /as sysdba

可进入系统

当在远程执行

sqlplus "sys/密码@服务名 as sysdba"

同样可正常登录到数据库系统上

上边的参数配置容易令人迷惑、混淆,造成假象。我推测网上有些朋友所以对身份认证产生费解可能就是因为这么

配置参数的!

三、其他

从前边的讨论可以知道,我们能够对sys以外的用户赋予sysdba身份,具体方法就是

SQLNET.AUTHENTICATION_SERVICES=(NONE)

REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')

口令文件PWDsid.ora

SQL>grant sysdba to 用户名

这样,其他具有sysdba身份的用户就加入到PWDsid.ora中,并可以被PWDsid.ora识别,我们可以用这个被赋予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

1、在windows下,SQLNET.AUTHENTICATION_SERVICES必须设置为NTS或者ALL才能使用OS认证;不设置或者设置为其他任何值都不能使用OS认证。


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

另外补充一下:
在linux下,设置成SQLNET.AUTHENTICATION_SERVICES=BEQ 也可以使用OS验证。

你可能感兴趣的:(oracle,数据库,windows,OS,database,login)