个人认为有3种:os认证、口令文件验证和数据字典验证
os和口令文件验证通过sqlnet.ora文件中的参数SQLNET.AUTHENTICATION_SERVICES,PFILE(或SPFILE)文件中的参数
REMOTE_LOGIN_PASSWORDFILE和口令文件PWDsid.ora三者协同作用实现身份认证,具体如下:
1、辅助知识
SQLNET.AUTHENTICATION_SERVICES=(NTS)|(NONE)
SQLNET.AUTHENTICATION_SERVICES=(NTS): 操作系统认证方式,不使用口令文件
SQLNET.AUTHENTICATION_SERVICES=(NONE):口令文件认证方式
REMOTE_LOGIN_PASSWORDFILE=('NONE')|('EXCLUSIVE')|('SHARED')
REMOTE_LOGIN_PASSWORDFILE=('NONE'):不使用口令文件,操作系统认证
REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE'):口令文件认证方式,但只有一个数据库实例可以使用此文件,
系统允许将SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户,且以具有这类身份的其他用户登录是有效的
REMOTE_LOGIN_PASSWORDFILE=('SHARED'):口令文件认证方式,可有多个数据库实例使用此文件,但是此设置下
只有INTERNAL/SYS帐号能被识别,即使文件中存有其他用户的信息,也不允许他们以SYSOPER/SYSDBA登录
注意:8i以后逐渐弃用了INTERNAL帐号
2、SQLNET.AUTHENTICATION_SERVICES=(NTS)同时REMOTE_LOGIN_PASSWORDFILE=('NONE'),此时为操作系统
认证方式。
sqlplus /nolog
sql>conn /as sysdba
或
sqlplus /nolog
sql>conn 任意用户名/密码 as sysdba
或
sqlplus "/ as sysdba"
均可以sysdba身份登录成功,进行数据库方面的操作;但是不能在远程使用上述命令,而且远程即时用sqlplus "用户名/密码 as sysdba"也无法登录,因此这种方式只能本地登录
注意:安装oracle时会自动建立一个ora_dba的用户组,只有以此用户组下的用户登录系统,上述才可能有效
3、SQLNET.AUTHENTICATION_SERVICES=(NONE)同时REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED'),配合口令文件PWDsid.ora,此时为口令文件认证方式
当在本地以ora_dba组下的用户登录进入windows2000后进行下边的操作:
sqlplus /nolog
sql>conn /as sysdba
系统提示错误,实质上是要求提供拥有sysdba身份的用户名和密码
在本地或远程进行下边的操作
sqlplus "sys/密码@服务名 as sysdba"
可进入系统,也就是说口令文件认证方式允许用户从本地或远程以sysdba身份登录,但必须提供口令
4、SQLNET.AUTHENTICATION_SERVICES=(NTS)同时REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED'),配合口令文件PWDsid.ora,此时操作系统认证和口令文件认证同时起作用
5、可以对普通用户进行sysdba或sysoper的授权
grant sysdba to 用户名
这样,其他具有sysdba身份的用户就加入到PWDsid.ora文件中,此文件是一个二进制文件,我们可以用如下方式查询是否拥有sysdba或sysoper权限:
select * from v$pwfile_users
假如授sysdba权限给scott.
如果用conn scott/tiger进行登陆,则采用数据字典对用户进行验证。
如果用conn scott/tiger as sysdba进行登陆,则采用密码文件进行验证。sysdba用户的密码是存放在pwd文件中的。此外,如果用数字字典验证的方式登陆并修改密码,相应的密码会resync到密码文件中。也就是说数据字典中的密码会和密码文件的同步。
注意:
普通用户有sysdba权限时,进入后执行show user,显示为sys;有sysoper权限时,进入后执行show user,显示为public
普通用户有此权限时,当更改此用户的口令时,同时更改口令文件的内容也同时修改相关数据字典的内容,即口令同步
6、数据字典验证