Chinaunix首页 | 论坛 | 博客
  • 博客访问: 894713
  • 博文数量: 101
  • 博客积分: 2256
  • 博客等级: 大尉
  • 技术积分: 1481
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-19 17:52
文章存档

2017年(1)

2013年(2)

2012年(25)

2011年(73)

分类: Oracle

2011-12-20 23:20:51

本文概述与实验环境

概述:本文只讨论OS认证和口令文件认证方式的配置方法,如何配置以及使用OS认证和口令文件认证方式验证SYSDBA/SYSOPER权限。

实验环境:Oracle 10.1 + Windows 2003 和 Oracle 10.2 + RHEL 4

特殊权限与Oracle登陆认证管理

在开始学Oracle的时候有件事一直让我感觉很奇怪,就是为什么在数据没有起来的时候只要登录到安装Oracle的操作系统中直接用sqlplus / as sysdba就能登陆到数据库中然后对数据库进行启动停止之类的操作。后来看到关于Oracle口令文件相关资料的时候才豁然开朗:数据库认证信息并不一定存在数据库中的,这点和SQL Server很是不一样。

在Oracle中有两类特殊的权限SYSDBA和SYSOPER,当DBA需要对数据库进行维护管理操作的时候必须具有这两类特殊权限之中的一种。在数据库没有打开的时候,使用数据库内建的账号是无法登陆数据库的,但是拥有SYSDBA或是SYSOPER权限的用户是可以登陆的。认证用户是否拥有两类特殊权限的方法有两种:OS认证和口令文件认证。

 

OS认证和口令文件认证方法
linux下Oracle OS认证与口令文件认证&#

Oracle数据库究竟使用OS认证还是口令文件认证来进行管理取决于下面三个因素:

  • SQLNET.ORA参数文件中的参数SQLNET.AUTHENTICATION_SERVICES设置
  • PFILE(SPFILE)参数文件中的参数REMOTE_LOGIN_PASSWORDFILE设置
  • 口令文件orapw$SID(Linux) | PWD$SID.ora(Windows)

Oracle权限认证的基本顺序是这样的,先由SQLNET.AUTHENTICATION_SERVICES的设置值来决定是使用OS认证还是口令文件认证,如果使用口令文件认证的话就要看后面两个条件了:如果REMOTE_LOGIN_PASSWORDFILE参数设置为非NONE而且口令文件存在的话就能正常使用口令文件认证,否则将会失败。

SQLNET.AUTHENTICATION_SERVICES参数

在SQLNET.ORA(位于$ORACLE_HOME/NETWORK/ADMIN目录中)文件中,需要修改时直接用文本编辑器打开修改就行了,对于不同的操作系统SQLNET.AUTHENTICATION_SERVICES的取值会有些不一样,通常我们会用到下面的一些设置值:

  • SQLNET.AUTHENTICATION_SERVICES = (ALL)

对Linux系统,支持OS认证和口令文件认证。

对Windows系统,实际实验是不支持此参数,验证失败。

  • SQLNET.AUTHENTICATION_SERVICES = (NTS)

此设置值仅用于Windows NT系统,此设置同时支持OS认证和口令文件认证,只有在设置了(NTS)值之后运行在Windows系统上的Oracle才支持OS认证。

  • SQLNET.AUTHENTICATION_SERVICES = (NONE)

此设置值在Windows和Linux是作用一样的,指定Oracle只使用口令文件认证。

  • 不设置此参数或SQLNET.AUTHENTICATION_SERVICES =

对Linux系统,默认支持OS认证和口令文件认证。

对Windows系统,默认只支持口令文件认证,不支持OS认证。

OS认证实现

Oracle使用操作系统中的两个用户组来控制OS认证,在不同的操作系统中这两个用户组的名称是不一样的,一般来说他们是OSDBA 和 OSOPER,这两个用户组都是在Oracle安装的时候创建的。下面列出不同系统中这两个用户组的名字:

Operating System Group
UNIX User Group
UNIX User Group
OSDBA
dba
ORA_DBA
OSOPER
oper
ORA_OPER

 

OSDBA用户组的用户可以使用SYSDBA权限登陆数据库,OSOPER用户组的的用户可以使用SYSOPER权限来登陆数据库。使用sqlplus可以用下面方法登陆

CONNECT / AS SYSDBA
CONNECT / AS SYSOPER

拥有OS权限的用户登陆数据库时不再需要输入用户名和密码,因此使用下面的命令也是可以正常登陆的:

CONNECT ANY_USER_NAME/ANY_PASSWORD AS SYSDBA
CONNECT ANY_USER_NAME/ANY_PASSWORD AS SYSOPER

因此要创建一个新的OS认证帐号步骤是:

 

  1. 建立一个OS用户
  2. 将用户加入到OSDBA或是OSOPER用户组
  3. 用新增加的用户登陆系统,然后输入sqlplus / AS SYSDBA进行登陆
REMOTE_LOGIN_PASSWORDFILE参数

REMOTE_LOGIN_PASSWORDFILE系统参数的设置制定了数据库使用口令文件的方法,此参数可以设置的值有三个:

  • REMOTE_LOGIN_PASSWORDFILE = NONE

不使用口令文件

  • REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE

使用口令文件,但只有一个数据库实例可用使用

  • REMOTE_LOGIN_PASSWORDFILE = SHARED

多个数据库实例共用一个口令文件,这种设置下是不能增加其他数据库用户作为特殊权限用户到口令文件中的。

REMOTE_LOGIN_PASSWORDFILE参数属于初始化参数,只能在init.ora/pfile中指定或是在数据库打开状态下使用下面语句修改,然后重新启动数据库。

ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

要检查当前REMOTE_LOGIN_PASSWORDFILE的设定值在登陆Oracle后输入下面的命令

SQLshow parameter remote
口令文件和口令文件认证

口令文件存放着被授予SYSDBA或SYSOPER权限的用户的用户名和密码。它是一个加密的文件,用户不能修改这个文件,
在Linux系统中口令文件一般保存在$ORACLE_HOME/dbs目录下,文件名为orapw$SID;在Windows系统中口令文件一般保存在$ORACLE_HOME/database目录下,文件名为PWD$SID.ora。

使用口令文件认证的基本步骤是:

 

  1. 使用orapwd工具生成口令文件
  2. 设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或是SHARED
  3. 使用SYS登陆数据库,创建新的数据库用户
  4. 使用GRANT命令授予新创建的用户SYSDBA/SYSOPER权限

1、使用orapwd工具生成口令文件

我们可以使用Oracle提供的工具orapwd来创建或者重新初始化一个口令文件:

[oracle@RHEL4 dbs]$ orapwd
Usage: orapwd file= password= entries= force=

  where
    file - name of password file (mand),
    password - password for SYS (mand),
    entries - maximum number of distinct DBA and     force - whether to overwrite existing file (opt),
OPERs (opt),
  There are no spaces around the equal-to (=) character.
[oracle@RHEL4 ~]$ orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y
[oracle@RHEL4 ~]$

注意:使用orapwd重新生成口令文件之后以保存的授予的其他用户的SYSDBA或是SYSOPER权限将会丢失,需要重新的GRANT。

设定的entries值是不能修改的,如果要修改entries的话需要重新生成口令文件,在生成口令文件之前可以先通过V$PWFILE_USERS视图查询出当前被授予SYSDBA/SYSOPER权限的用户,然后在重新生成口令文件以后重新对这些用户授予SYSDBA/SYSOPER权限

2、设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或是SHARED

ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

3、使用SYS登陆数据库,创建新的数据库用户

CREATE USER test IDENTIFIED BY test;

4、使用GRANT命令授予新创建的用户SYSDBA/SYSOPER权限

GRANT SYSDBA TO test.

每次在Oracle系统里面使用GRANT SYSDBA/SYSOPER授予新用户特殊权限或是ALTER USER命令修改拥有SYSDBA/SYSOPER权限的用户密码的时候,Oracle都会自动的修改口令文件,增加或是修改相应的项目,这样保证在数据没有打开的情况拥有特殊权限的用户能正常的登陆数据库以进行管理操作。

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