关于oracle的用户认证

来源:互联网 发布:犀牛软件4.0下载 编辑:程序博客网 时间:2024/06/03 11:18

我有两台windows2003 系统的口令和账户都是一模一样,竟然oracle的enterprise manager console只要以

sysdba就可以登录到另外一台oracle的机器上,不管输入账户和密码是什么都行(如账户sdff,密码sdffa);显

然,oracle当作了操作系统本地认证了而我第三台是xp就不能这样做(不在一个网段且系统帐户口令不一样),

但是可以用sys账户以sysdba登录,这可能用到的就是远程登录了。

前言

发现有很多人提问数据库身份认证方面的问题,基此就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(oracle目录/oracle92/network/admin)文件中的参数 SQLNET.AUTHENTICATION_SERVICES,

PFILE(或SPFILE)文件(oracle目录/oracle92/database)中的参数 REMOTE_LOGIN_PASSWORDFILE

和口令文件PWDsid.ora(oracle目录/oracle92/database)三者协同作用实现身份认证。

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用户下所能执行的操作。

原创粉丝点击