密码文件主要进行DBA用户的身份认证,具有sysdba,sysoper权限的用户被称为DBA用户。默认情况下sys用户拥有sysdba和sysoper权限,而system用户及不拥有sysdba权限也不拥有sysoper权限。
密码文件的存放位置为:
Linux:$ORACLE_HOME/dbs/orapw$ORACLE_SID即:ORACLE_HOME/dbs/orapw<sid>
Windows:$ORACLE_HOME/database/PW%ORACLE_SID%.ora
拥有sysdba权限的用户有两种认证方式;使用与操作系统集成的身份验证以及使用Oracle数据库的密码文件进行身份认证 。密码文件验证方式也称之为外部身份验证,即不需要启动数据库就验证用户的身份。
windows认证和oracle认证决定在两个参数中:
1. remote_login_passwordfile = none | exclusive |shared 位于
$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora参数文件中
none : 不使用密码文件认证
exclusive :要密码文件认证,自己独占使用(默认值)
shared :要密码文件认证,不同实例dba用户可以共享密码文件
2. SQLNET.AUTHENTICATION_SERVICES = none | all | ntf(windows)位于
$ORACLE_HOME/network/admin/sqlnet.ora
none : 表示关闭操作系统认证,只能密码认证
all : 用于linux或unix平台,关闭本机密码文件认证,采用操作系统认证,但远程<异机>可以使用密码文件认证
nts : 用于windows平台
NOTE:通过v$pwfile_users数据字典可以查看哪些用户有sysdba和sysoper权限。但是除了sys用户,其余所有用户的登陆密码都不是由密码文件控制的,即使是使用了登陆属性as sysdba。操作系统集成的身份验证只对拥有sysdba权限的用户才有效,有sysoper权限的用户是无法进行系统身份验证的。
代码说话-密码文件对哪些用户起作用:
1. 取消系统集成的身份验证方式:SQLNET.AUTHENTICATION_SERVICES=(NONE)
2. SQL> conn sys/syspwd as sysdba
已连接。
说明:sys的密码syspwd就是在密码文件中定义的
3. SQL> select * from v$pwfile_users;
USERNAME SYSDBA SYSOPER
----------------------------- --------
SYS TRUE TRUE
USER01 TRUE FALSE
USER02 FALSE TRUE
说明:user01用户有sysdba权限,user02有sysoper权限
4. SQL> conn user01/ syspwd as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
警告: 您不再连接到 ORACLE。
说明:user01无法使用密码文件中定义的密码
5. SQL> conn user01/user01 as sysdba
已连接。
说明:使用user01自己的密码就可以登陆了
代码说话-哪些用户可以使用系统集成的身份验证方式
1. 添加系统集成的身份验证方式:SQLNET.AUTHENTICATION_SERVICES=(NTS)
2. SQL> conn sys/pwd as sysdba
已连接。
USER 为 "SYS"
说明:sys用户系统验证成功
3. SQL> conn user01/pwd as sysdba
已连接。
USER 为 "SYS"
说明:拥有sysdba权限的用户系统验证也成功
4. SQL> conn user02/pwd as sysoper
ERROR:
ORA-01031: insufficient privileges
说明:拥有sysoper权限的用户系统验证失败
5. SQL> conn user02/user02 as sysoper
已连接。
USER 为 "PUBLIC"
说明:user02使用自身密码登陆成功
6. SQL> conn sys/pwd as sysoper
ERROR:
ORA-01031: insufficient privileges
说明:sys用户作用sysoper用户登陆时也不能成功
oracle提供了一个工具orapwd,专门用来修改或者创建密码文件。在dos下输入orapwd即可看到其使用方法:Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
file - name of password file (mand), /*密码文件的名字orapw<sid>*/
password - password for SYS (mand), /*sys用户的密码*/
entries - maximum number of distinct DBA and
/*可以有多少个sysdba,sysoper权限用户放到密码文件中去,去掉重复记录*/
/*注意entries中存放的个数但不是实际个数,这个是二进制数据*/
force - whether to overwrite existing file (opt), /*10g新增的参数,默认值为n ,y表示允许覆盖*/
There are no spaces around the equal-to (=) character.
修改密码和重建密码文件的口令是一样的,如下:
orapwd file=?\database\PWDdate0808.ora password=date0808 entries=30 force=yes ignorecase=no
重建之后,密码文件里面之后保存一个用户:sys。其他后期被赋予了sysdba以及sysoper权限的用户都将会丢失
设置密码大小敏感的参数show parameters sec_case_sensitive_logon
查看哪些用户拥有sysdba以及sysoper权限:SQL> select * from v$pwfile_users;
dba和sysdba的区别:
sysdba,是管理oracle实例的,它的存在不依赖于整个数据库完全启动,只要实例启动了,它就已经存在,以sysdba身份登陆,装载数据库、打开数据库。只有数据库打开了,或者说整个数据库完全启动后,dba角色才有了存在的基础,dba只是个角色而已.
--转自