Chinaunix首页 | 论坛 | 博客
  • 博客访问: 880198
  • 博文数量: 254
  • 博客积分: 5350
  • 博客等级: 大校
  • 技术积分: 2045
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-27 13:27
文章分类

全部博文(254)

文章存档

2015年(1)

2014年(9)

2013年(17)

2012年(30)

2011年(150)

2010年(17)

2009年(28)

2008年(2)

分类: LINUX

2010-03-04 16:29:06

                                 Orapwd的前世今生

                                                                        

  Orapwdoracle生成口令文件的命令。口令文件一般存放在dbsunix/linux)或者databasewin)目录下,叫做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用户密码。

7spfile/pfileremote_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认证,没有口令文件认证,这就是此参数的意义—口令文件验证的开关。

8sqlnet.oraSQLNET.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.oraAUTHENTICATION_SERVICES参数;spfile/pfileremote_login_passwordfile参数。并且这两个开关互不矛盾,可以同时打开同时关闭或者只开一个。

OS级认证是优先于口令文件认证的。

阅读(1191) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~