1,为什么oracle可以不使用sys密码的前提下以sysdba身份登陆(sqlplus / as sysdba),因为oracle安装时,在本地建立了ora_dba权限组,并将操作系统用户加入了该组,另外,%ORACLE_HOME%/db_1/NETWORK/ADMIN/sqlnet.ora中,对能否进行操作系统验进行了如下定义:
操作系统验证有
SQLNET.AUTHENTICATION_SERVICES= (NTS)
操作系统验证无
SQLNET.AUTHENTICATION_SERVICES= (NONE)
设置为操作系统验证有的场合,可以任何用户进行as sysdba登陆,哪怕用户是不存在的。而且使用show user命令时,显示的都是SYS。
设置为操作系统验证无的场合,只有密码文件中存在的用户才能进行as sysdba登陆。
密码文件位置:%ORACLE_HOME%/db_1/database/ PWD%SID%.ora
查询密码文件中的用户:select * from v$pwfile_users;
追加用户到密码文件或从密码文件中删除指定用户:
GRANT {SYSDBA | SYSOPER} TO scott;
REVOKE {SYSDBA | SYSOPER} FROM scott;
另外%ORACLE_HOME%/admin/%SID%/pfile/init.ora中,
有关于REMOTE_LOGIN_PASSWORDFILE的密码文件的使用设置。
REMOTE_LOGIN_PASSWORDFILE = { SHARED | EXCLUSIVE | NONE }
EXCLUSIVE:默认值,只有一个数据库可以使用这个口令文件。在这种模式下,口令文件可以包含SYS和SYS以外的多个特许的Oracle账户的口令。
SHARED:多个数据库可以使用相同的口令文件。这种模式不能追加其他用户到密码文件中,也不能修改现有密码文件中的口令。可以在EXCLUSIVE追加用户或修改口令,再切换成为SHARED模式。
NONE参数:Oracle会忽略口令文件,只能以操作系统用户进行sysdba访问登录。
注意:当设定为EXCLUSIVE或SHARED模式时,如果密码文件不存在,与设定为NONE结果相同。
2,密码文件的创建
ORAPWD FILE=filename PASSWORD=<password> [ENTRIES=numusers] [FORCE={Y|N}] [IGNORECASE={Y|N}]
FILE:口令文件名称PWD%SID%.ora。
PASSWORD:sys用户的口令。
ENTRIES:设定密码文件中Oracle用户帐户的最大数量。
FORCE:如果存在同名的密码文件,是否进行覆盖。
IGNORECASE:是否区别密码大小写。(Oracle11g有效)
疑问:有多个密码文件时,设定REMOTE_LOGIN_PASSWORDFILE=SHARED,会使用哪个密码文件?