您的位置:首页 > 数据库 > Oracle

Oracle OS认证与口令文件认证详解

2013-12-08 11:10 417 查看
Oracle OS认证与口令文件认证详解

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

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

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

OS认证和口令文件认证方法

Oracle特殊权限认证方法:
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后输入下面的命令

SQL> show parameter remote
NAME TYPE VALUE
------------------------------------ ----------- ----------------------
remote_dependencies_mode string TIMESTAMP
remote_listener string
remote_login_passwordfile string EXCLUSIVE
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE
result_cache_remote_expiration integer 0

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

测试

1、验证OS认证
设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (NTS),

REMOTE_LOGIN_PASSWORDFILE = NONE,然后进行下面的操作。

SQL> alter system set remote_login_passwordfile=NONE SCOPE=SPFILE;
系统已更改。

本地使用下面两种方式登陆,都能成功 :

C:\Users\libo>sqlplus
/ as sysdba;


SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 11:01:40 2013

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

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

C:\Users\libo>sqlplus
aaa/bbb as sysdba;


SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 11:02:35 2013

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

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>

远程使用口令文件方式登陆,失败:

C:\Users\libo>sqlplus scott/Lb123456@192.168.1.106/dbtest as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 11:04:54 2013

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

ERROR:
ORA-12541: TNS: 无监听程序
请输入用户名:

2、两种认证都失效 :

设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (NONE),REMOTE_LOGIN_PASSWORDFILE = NONE,然后进行下面的操作。

本地使用下面两种方式登陆,都失败

C:\Users\libo>sqlplus / as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 11:06:36 2013

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

ERROR:
ORA-01031: insufficient privileges
请输入用户名:

C:\Users\libo>sqlplus aaa/bbb as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 11:07:23 2013

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

ERROR:
ORA-01031: insufficient privileges
请输入用户名:

远程使用口令文件方式登陆,失败

C:\Users\libo>sqlplus scott/Lb123456@192.168.1.106/dbtest as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 11:08:20 2013

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

ERROR:
ORA-12541: TNS: 无监听程序

请输入用户名:

3、验证口令文件认证 :
设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (NONE),REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE或SHARED,然后进行下面的操作。

SQL> alter system set remote_login_passwordfile=exclusive SCOPE=SPFILE;
系统已更改。

本地使用验证OS认证,失败

C:\Users\libo>sqlplus / as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 11:17:17 2013

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

ERROR:
ORA-01031: insufficient privileges
请输入用户名:

本地验证口令文件认证,成功

C:\Users\libo>sqlplus sys/Lb123456 as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 11:17:54 2013

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

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

远程使用口令文件认证,成功

C:\Users\libo>sqlplus sys/Lb123456@192.168.1.106:1521/dbtest as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 12:18:06 2013

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

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

4、两种认证都成功
设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (NTS),REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE,然后进行下面的操作。

本地使用验证OS认证,成功 :

C:\Users\libo>sqlplus / as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 12:24:15 2013

Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

远程使用口令文件认证成功 :

C:\Users\libo>sqlplus sys/Lb123456@192.168.1.106:1521/dbtest as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 12月 7 12:25:22 2013

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

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

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

1、使用orapwd工具生成口令文件 (windows下操作)
我们可以使用Oracle提供的工具orapwd来创建或者重新初始化一个口令文件:
C:\Users\libo>orapwd file=E:\install\oracle\product\11.2.0\dbhome_1\database\orapwdDBTEST.ora
password=Lb123456 entries=10 force=y
注意:使用orapwd重新生成口令文件之后以保存的授予的其他用户的SYSDBA或是SYSOPER权限将会丢失,需要重新的GRANT。

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

SQL> select * from v$PWFILE_USERS;

USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE

2、设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或是SHARED

SQL> alter system set remote_login_passwordfile=EXCLUSIVE SCOPE=SPFILE;
系统已更改。

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

SQL> create user test IDENTIFIED BY test;
用户已创建。

4、使用GRANT命令授予新创建的用户SYSDBA/SYSOPER权限
SQL> grant sysdba to test;
授权成功。

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

5、说明:如果要取消SYSDBA权限只需要运行下面的语句就可以了
SQL > revoke sysdba from test ;

常见问题说明 :
1、如何查找拥有SYSDBA或是SYSOPER权限的用户
使用视图V$PWFILE_USERS,结果集中的SYSDB和SYSOP分别代表是否有SYSDBA和SYSOPER权限

SQL> select * from v$pwfile_users;

USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
TEST TRUE FALSE FALSE

2、授予权限时出现”ORA-01994: GRANT failed: password file missing or disabled”
出现这种情况是因为没有创建口令文件,或者是口令文件放置的目录不正确,Oracle找不到。只要重建或将口令文件置于$ORACLE_HOME/dbs/目录中就可以了。

3、忘记了SYS帐号的密码怎么办?
如果数据库启用的OS认证登陆,则可以用OS认证登陆数据库,然后使用下面的命令进行修改
alter user SYS identified by pwd ;

如果没有启用OS认证登陆,则需要用orapwd重建口令文件
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID.ora password=pwd entries=10 force=y
其中的password项所指定的就是SYS的密码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: