1.主要几个配置文件
1.sqlnet.ora 中的sqlnet.authentication_services,可选NONE|NTS
2.初始文件initSID.ora 中的remote_login_passwordfile 参数
Remote_login_passwordfile=(NONE)|(EXCLUSIVE)|(SHARED)
NONE:不使用口令文件,操作系统认证;
EXCLUSIVE:口令文件认证方式,但只有一个数据库实例可以使用此文件;
SHARED:口令文件认证方式,可以有多个数据库实例可以使用此文件,但此设置下只有SYS帐号能被识别,即使文件中存在其他用户的信息,也不允许他们以SYSOPER/SYSDBA登录.
修改方法:
1.先关闭数据库
2.在init.ora(默认初始化文件)中修改remote_login_passwordfile 参数
3.从初始化文件启动数据库,如startup pfile=/opt/oracle/admin/$SID/pfile/init.ora
3.密码文件
在本机linux环境中,密码文件名称如orapwr$sid
orapwd file=$ORACLE_HOME/dbs/orapwr$sid password=sys entries=20 force=y;
1).sqlnet.authentication_services=(NTS)
同时Remote_login_passwordfile=(NONE),此时为操作系统认证方式.
当以oracle_dba组下的用户登录进入本地的操作系统后,进行以下操作:
sqlplus /nolog
SQL>conn /assysdba
可以以sysdba身份登录成功,进行数据库方面的操作.
当以远程进行登录时,执行:
sqlplus /nolog
SQL>conn /assysdba
则会显示:
ERROR:ORA-01031:insufficient privileges
即不允许以sysdba身份远程登录系统,这也是OS认证这所以称为本地认证方式的原因.
(2).Sqlnet.authentication_services=(NONE),同时
Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令文件orapwsid,此时为口令文件认证方式:
当在本地以oracle_dba组下的用户登录进入系统时,进行以下操作:
sqlplus /nolog
SQL>conn /assysdba
则会显示:
ERROR:ORA-01031:insufficient privileges
在本地或远程进行下边的操作:
sqlplus /nolog
SQL>conn sys/密码@服务名assysdba
可以进入系统,也就是说口令文件认证方式允许用户从本地或远程以sysdba身份登录,但必须提供口令字.
(3).Sqlnet.authentication_services=(NTS),同时
Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令文件orapwsid,此时为操作系统认证和口令文件认证同时起作用:
当在本地以oracle_dba组下的用户登录进入操作系统后,进行下边的操作:
sqlplus /nolog
SQL>conn /assysdba
可以进入系统.即操作系统认证方式登录成功.
当在远程执行:
sqlplus /nolog
SQL>conn sys/密码@服务名assysdba
同时可正常登录到数据库系统,即口令文件认证方式登录成功.
附:
要知道以下几种登陆方式不是一种概念
sqlplus /nolog
1: conn /assysdba 本机登陆,使用操作系统认证,有无监听都可以
2: conn sys/password assysdba 本机登陆,使用密码文件认证,有无监听都可以
3: conn sys/password@dbanote assysdba 可以本机可以远程,使用密码文件认证,必须有监听,必须有tnsnames.ora,remote_login_passwordfile必须是EXCLUSIVE
说明:
从oracle的解释可以知道,SQLNET.AUTHENTICATION_SERVICES=(NTS)是WINDOWS系统专用的,对linux/UNIX是不适用的。
最后做一个简单的总结:
1、在windows下,SQLNET.AUTHENTICATION_SERVICES必须设置为NTS或者ALL才能使用OS认证;不设置或者设置为其他任何值都不能使用OS认证。
2、在linux下,在SQLNET.AUTHENTICATION_SERVICES的值设置为ALL,或者不设置的情况下,OS验证才能成功;设置为其他任何值都不能使用OS认证。
===================
本文环境配置:Oracle10gR2,Windows XP
Oracle的用户信息一般来说是保存在数据字典里的,所以常规用户在Oracle数据库没有启动的时候是无法登陆的。但有两类用户例外,这就是具有sysdba或者sysoper权限的用户。Oracle sysdba或者sysoper用户的登陆有两种方式:一是通过OS认证,二是通过密码文件验证。
究竟使用哪一种验证方式以及能否成功登陆取决于三个方面的因素:
1. sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES的设置
2. 参数文件中REMOTE_LOGIN_PASSWORDFILE的设置
3. 密码文件 PWD%sid%.ora
Oracle进行权限验证的大致顺序如下:
1. 根据SQLNET.AUTHENTICATION_SERVICES的值决定是进行os验证还是密码文件验证。
2. 如果是os验证,根据当前用户的用户组判断是否具有sysdba权限。如果os验证失败,则进行密码文件验证。
2. 如果是密码文件验证,REMOTE_LOGIN_PASSWORDFILE的值以及密码文件是否存在决定了验证是否成功。
1. OS 验 证
要启用os验证,就必须在qlnet.ora中设置SQLNET.AUTHENTICATION_SERVICES=(NTS),然后在Windows中建立ora_dba用户组,把相关用户加入到这个组中(e.g., administrator),这样administrator就可以在不用提供用户名和密码(或者提供任意的用户名和密码)的情况下以sysdba身份本地登陆。因为操作系统已经代替Oracle进行了验证。
测试一:ora_dba用户本地登陆
Sql代码
1.C:\>sqlplus / as sysdba
2.Connected to:
3.Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
4.With the OLAP and Data Mining options
5.SQL>
6.
7.C:\>sqlplus wrong_user/wrong_password as sysdba
8.Connected to:
9.Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
10.With the OLAP and Data Mining options
11.SQL>
C:\>sqlplus / as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
SQL>
C:\>sqlplus wrong_user/wrong_password as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
SQL>
测试二:非ora_dba用户本地登陆
Java代码
1.C:\>sqlplus / as sysdba
2.ERROR:
3.ORA-01031: insufficient privileges
4.Enter user-name:
5.
6.C:\>sqlplus wrong_user/wrong_password sysdba
7.ERROR:
8.ORA-01017: invalid username/password; logon denied
9.Enter user-name:
10.
11.C:\>sqlplus sys/change_on_install as sysdba
12.Connected to:
13.Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
14.With the OLAP and Data Mining options
15.SQL>
C:\>sqlplus / as sysdba
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
C:\>sqlplus wrong_user/wrong_password sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
C:\>sqlplus sys/change_on_install as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
SQL>
2. 密码文件验证
密码文件包含了被授予sysdba和sysoper权限的用户的用户名和密码。这是一个加密文件,一般来说存放在%oracle_home%/database目录下,文件名为PWD%sid%.ora。
如果要使用密码文件验证,则把sqlnet.ora改为SQLNET.AUTHENTICATION_SERVICES=none,或者从sqlnet.ora中删除SQLNET.AUTHENTICATION_SERVICES。同上匿名登陆sqlplus会失败,给出用户名和密码就可以成功登陆。
Sql代码
1.C:\>sqlplus / as sysdba
2.ERROR:
3.ORA-01031: insufficient privileges
4.Enter user-name:
5.
6.C:\>sqlplus sys/change_on_install as sysdba
7.Connected to an idle instance.
8.idle>
C:\>sqlplus / as sysdba
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
C:\>sqlplus sys/change_on_install as sysdba
Connected to an idle instance.
idle>
测试一:删除密码文件。使用用户名和密码登陆,失败!
Sql代码
1.C:\>sqlplus sys/change_on_install as sysdba
2.ERROR:
3.ORA-01031: insufficient privileges
4.Enter user-name:
C:\>sqlplus sys/change_on_install as sysdba
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
测试二:恢复密码文件,设置REMOTE_LOGIN_PASSWORDFILE=none。使用用户名和密码登陆,失败!
Sql代码
1.SQL> alter system set remote_login_passwordfile=none scope=spfile;
2.System altered.
3.
4.C:\>sqlplus sys/change_on_install as sysdba
5.ERROR:
6.ORA-01017: invalid username/password; logon denied
7.Enter user-name:
SQL> alter system set remote_login_passwordfile=none scope=spfile;
System altered.
C:\>sqlplus sys/change_on_install as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
测试三:恢复密码文件,设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或者SHARED。使用用户名和密码登陆,成功!
Sql代码
1.SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
2.System altered.
3.
4.C:\>sqlplus sys/change_on_install as sysdba
5.Connected to an idle instance.
6.SQL>
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
System altered.
C:\>sqlplus sys/change_on_install as sysdba
Connected to an idle instance.
SQL>
3. 密码文件
查看具有sysdba或者sysoper权限的用户:
Sql代码
1.SQL> select * from v$pwfile_users;
2.
3.USERNAME SYSDB SYSOP
4.------------------------------ ------- -------
5.SYS TRUE TRUE
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ------- -------
SYS TRUE TRUE
每次使用grant sysdba/sysoper授予新用户特殊权限或是alter user命令修改拥有sysdba/sysoper权限的用户密码的时候,Oracle都会自动的同步密码文件,这样保证在数据库没有打开的情况拥有特殊权限的用户能正常的登陆数据库以进行管理操作。
Sql代码
1.SQL> grant sysdba to logicgate;
2.Grant succeeded.
3.
4.SQL> select * from v$pwfile_users;
5.
6.USERNAME SYSDB SYSOP
7.------------------------------- -------- --------
8.SYS TRUE TRUE
9.LOGICGATE TRUE FALSE
SQL> grant sysdba to logicgate;
Grant succeeded.
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------- -------- --------
SYS TRUE TRUE
LOGICGATE TRUE FALSE
使用orapwd命令可以重建密码文件。
Java代码
1.C:\>orapwd
2.Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
3. where
4. file - name of password file (mandatory),
5. password - password for SYS (mandatory),
6. entries - maximum number of distinct DBA (optional),
7. force - whether to overwrite existing file (optional)
C:\>orapwd
Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
where
file - name of password file (mandatory),
password - password for SYS (mandatory),
entries - maximum number of distinct DBA (optional),
force - whether to overwrite existing file (optional)
其中文件名和密码是必需的。entries设置了密码文件可包含的dba用户的最大数目。force定义了是否覆盖当前文件。重建密码文件会清除系统内除了sys用户以外所有sysdba用户的密码。必须使用grant sysdba同步密码文件。
Java代码
1.C:\>orapwd file=%oracle_home%\database\PWDepcit.ora password=temp entries=20 force=y;
2.
3.C:\>sqlplus sys/temp as sysdba
4.Connected to:
5.Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
6.With the OLAP and Data Mining options
7.
8.SQL> select * from v$pwfile_users;
9.
10.USERNAME SYSDB SYSOP
11.------------------------------- -------- --------
12.SYS TRUE TRUE