分类: LINUX
2010-03-04 16:29:06
Orapwd是oracle生成口令文件的命令。口令文件一般存放在dbs(unix/linux)或者database(win)目录下,叫做pwdsid.ora(10g) 或者orapwsid/orapw(9i及以下)
1、 为什么需要口令文件?
在数据库尚未启动的时候,负有启动数据库使命的sysdba/sysoper用户如何验证登录权限呢?
只能把sysdba/sysoper的用户名和密码记录在一个文件中,这个文件就是口令文件。
所有sysdba以及sysoper用户列表都存放在口令文件中,如果口令文件删除,也就意味着其中存放的sysdba/sysoper用户不再具有sysdba/sysoper权限。
所有希望用sysdba/sysoper身份登陆上数据库的用户,不管此时数据库启动没有,都必须经过口令文件这一关,只要其中有相关记录并且口令能对上,那么就可以放行,否则拒绝登入。当然用拥有dba权限的操作系统用户(linux/unix下一般是oracle用户,win下是隶属于ORA_DBA组的用户)登进来的除外。
如果在数据库open状态下,口令文件被删除又重建,那么只有重新启动数据库口令文件才能生效,此前任何sysdba/sysoper都无法连进来。
2、口令文件损坏或者丢失怎么办?
口令文件就是sysdba/sysoper用户的唯一花名册,丢了就进不来,不管数据库启动没有。只能用操作系统级权限验证登陆,即oracle/oracle登陆,然后orapwd重建花名册。Orapwd命令第二个参数是指定sys的密码,参数等于什么,sys密码以后就是什么。为什么要指定sys密码?因为花名册里面必须要有用户密码,否则怎么验证啊?但此时数据库如果没启动的话就根本取不到sys密码,所以只能强行指定了,启动后数据库里面sys的密码会被改成此时指定的。Entries参数基本没有用,本意是花名册中最大可以存放多少个用户条目,实际上限制不了,能够容纳的数目会比指定的数目多几条,原因是orapwd分配口令文件空间时是按照os的最小block来分配的,这个问题不需要太多关注,毕竟你的数据库需要几个sysdba呢?一个足矣!。另外重建花名册的工作只能由oracle/oracle用户完成,或者具有dba权限的用户也可以,其他用户执行orapwd命令都会失败。
3、如何把sysdba/sysoper用户加到花名册中去?
再执行一遍grant sysdba/sysoper to sb.即可,oracle会自动在口令文件中增加一个条目,并且把密码copy过来。察看口令文件内容的方法:select * from v$pwfile_users;
4、没有口令文件是否可以启动数据库?
可以,9i及以下mount过程中会报错,然后手动open就可以了。因为只要用oracle/oracle照样可以做sysdba的事情,没有理由让数据库启动不了。10g已经不会报错了。
5、没有口令文件为什么是mount阶段报错而不是momount阶段报错?
哈哈,因为只有到了alter mount阶段才验证各种文件,nomount只读spfile/pfile创建进程。
6、修改sysdba/sysoper用户密码时,能否同步到口令文件?
可以同步。Alter user xxx identified by yyy.
所有密码忘记都没关系,但至少要记住ORACLE用户密码。
7、spfile/pfile中remote_login_passwordfile是干嘛用的?
设定为EXCLUSIVE,则一个实例专用;SHARE则可以多个实例共享(用于OPS/RAC环境);NONE则不启用口令文件,此时任何sysdba/sysoper都无法连接进来。在用SPFILE的情况下,remote_login_passwordfile参数怎么改呢?SPFILE是不可以强行编辑的,否则数据库不认的。用alter system set remote_login_passwordfile=none scope=spfile.改成NONE以后怎么改回来呢?HOHO……用os级认证登陆,然后alter system,或者直接create spfile from pfile;
remote_login_passwordfile=’none’意味着禁用口令文件,有也不能用。等于可以disable所有sysdba/sysoper,此时只能用oracle/oracle用户来启动和关闭数据库,也就是只有os认证,没有口令文件认证,这就是此参数的意义—口令文件验证的开关。
8、sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES=(NTS/NONE)有什么用?
NTS=NT Security 即采用OS优先认证登陆,NONE为不可以,必须采用usr/pwd as sysdba/sysoper 登陆。这里是操作系统级验证的开关。
9、如果SQLNET.AUTHENTICATION_SERVICES=(NONE)并且remote_login_passwordfile=’none’,即两个开关都关闭,那么神仙也进不了数据库,hoho…我指的是sysdba/sysoper用户,普通用户可以照常使用的。当然,有物理权限的人也除外,即你可以物理地打开这台计算机操作。
总结一下,ORACLE有两种方式可以认证sysdba/sysoper用户:操作系统级认证—dba权限组(linux/unix)和ORA_DBA组(win);口令文件认证。
两种方式有各自的开关:sqlnet.ora中AUTHENTICATION_SERVICES参数;spfile/pfile中remote_login_passwordfile参数。并且这两个开关互不矛盾,可以同时打开同时关闭或者只开一个。
OS级认证是优先于口令文件认证的。