oracle数据库对数据库用户有三种验证方式:操作系统验证、密码文件验证和数据字典验证。sysdba用户只能使用操作系统或者密码文件验证,而普通用户只能使用数据字典验证。
究竟使用哪一种验证方式以及能否成功登陆取决于三个方面的因素:
1. sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES的设置
2. 参数文件中REMOTE_LOGIN_PASSWORDFILE的设置
3. 密码文件 orapwSID(SID和ORACLE_SID环境变量设置相同)
Oracle 进行权限验证的大致顺序如下: 1. 根据SQLNET.AUTHENTICATION_SERVICES的值决定是进行os验证还是密码文件验证。 2. 如果是os验证,根据当前用户的用户组判断是否具有sysdba权限。如果os验证失败,则进行密码文件验证。 2. 如果是密码文件验证,REMOTE_LOGIN_PASSWORDFILE的值以及密码文件是否存在决定了验证是否成功。
一、SYS用户验证 1. 操作系统验证 对于在安装Oracle的本机上使用Oracle的情况,Oracle可以将用户验证交给操作系统,只要登录操作系统的用户在DBA组里,就有SYS用户的权限,可以修改 $ORACLE_HOME/dbs/sqlnet.ora,加入如下行: SQLNET.AUTHENTICATION_SERVICES= (NTS) 操作系统验证具有最高优先级,当设置为它时,密码文件验证不起作用 2. 密码文件验证 要使用密码文件验证,首先得禁用操作系统验证,修改 $ORACLE_HOME/network/admin/sqlnet.ora,加入如下行(这里将$ORACLE_HOME转化为绝对路径): SQLNET.AUTHENTICATION_SERVICES= (NONE) 其次是设置密码验证配置参数:remote_login_passwordfile,它可以有几个值,其含义如下 none: 不使用密码验证 exclusive: 仅允许一个实例使用该密码文件 shared: 多个实例可以共用一个密码文件 现在将参数设置为独占: alter system set remote_login_passwordfile=exclusive scope=spfile; shutdown immediate 使用密码实用程序生成密码文件 orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=sys(这里把sys用户的密码设置为sys) 此时尝试以不同方式登录数据库 $ sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - Production on Thu Nov 4 12:52:07 2010 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. ERROR: ORA-01031: insufficient privileges 如果使用下面的方式登录方式,即能正常登录: sqlplus sys/sys as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Nov 4 13:20:06 2010 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. Connected to an idle instance.
SQL>
二、普通ORACLE用户验证 普通的oracle用户使用的是字典认证,只有当数据库启动到open模式之后才能登录数据库。 SYS用户是在数据库还没启动时登录数据库进行启动操作,而普通用户是在数据库启动后操作不同方案下的对象。
所以普通用户采用的是数据字典的验证方式: select username,password from dba_users; 可以看到所有用户和加密后的密码
|