REMOTE_LOGIN_PASSWORDFILE参数增强系统的安全性,在此总结一下在REMOTE_LOGIN_PASSWORDFILE参数取不同值时的行为特性。
REMOTE_LOGIN_PASSWORDFILE参数可以有三种取值:EXCLUSIVE(默认)、NONE和SHARED。
1)当取值为EXCLUSIVE时,tom在9I和10I编程中exclusive提到是只有一个数据库使用一给定的密码文件
sql>show parameter remote_login_passwordfile;默认的是exclusive
alter system set remote_login_passwordfile=exclusive scope=spfile
sql>conn sys/oracle@test as sysdba
sql>grant sysdba to ashuang
sql>revoke sysdba from ashuang
sql>conn ashuang/ashuang@test as sysdba,此时的user会显示sys
如果移除pwdoracle_sid.ora
window下在oracle_homedatabasepwdoracle_sid.ora
linux下直接rm oracle_home/dbs/pwdorcle_sid.ora
移除pwdorcle_sid.ora密码验证文件后,oracle中的sys用户无法登录系统,任何以sys用户登录的用户都会报权限不足
sql>conn sys/oracle as sysdba
ERROR:ORA-01031: insufficient privileges
密码验证文件用于sys用户登录数据库管理而用。
sys密码文件损坏后可以利用oracle中的orapwd工具来创建密码文件
orapwd file= password=oracle entries=3 force=y/n 注意其中的file后文件不要用单引号,entries和force是可选参数。
其中的entries指定sys用户的最大限制数,force指定了是否重写现有的文件。
密码验证文件重建要注意:下次重启数据库后,新建的密码文件可能无法让其使用。这时候就出现了sys用户无法登录,
此时可以通过os来验证,创建oracle数据库后默认的在本机数据库中有个dba组,只需要把当前的用户放置在dba组即可。
当然还有一个是sqlnet.ora中的参数
SQLNET.AUTHENTICATION_SERVICES = (NTS)默认的是NTS,允许os验证,NONE不允许os验证来连接数据库
select * from v$pwfile_users表中会有sys用户的信息
2)当取值为NONE时,数据库中认为不存在密码文件,当然远程的sys用户无法利用os来验证所以也就无法登录,本机也只能用os验证来登录系统
grant sysdba to ashuang 无法授权
口令文件缺失或禁用,个人理解是否设置了remote_login_password=none就禁用了密码验证文件,也就无法grant和revoke往密码验证文件中写入和移除数据了
sql>revoke sysdba to ashuang 虽然成功但是并没有实际的作用,因为密码验证文件oracle已经禁用它了。
3)当取值为SHARED时
允许客户端以SYSDBA或SYSOPER权限登录到数据库实例中完成数据库管理操作;shared取值的意思是允许多个数据库使用相同的密码文件
conn sys/oracle@test as sysdba
grant sysdba to ashuang 出现口令文件无法在shared模式下更新
个人理解是shared模式下允许多个数据库使用相同的密码文件,但是由于涉及到多个数据库,所以是无法更新的只能读取.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25362835/viewspace-1052846/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25362835/viewspace-1052846/