一、Oracle安装之后默认情况下是启用了OS认证的,这里提到的os认证是指服务器端os认证。OS认证的意思把登录数据库的用户和口令校验放在了操作系统一级。如果以安装Oracle时的用户登录OS,那么此时在登录Oracle数据库时不需要任何验证
1. 使用操作系统验证
2个前提必须同时满足
1)os下建立用户ORA_DBA用户组,
然后可以新建立用户或者把原来的用户加入到ORA_DBA组中,然后使用这个用户在安装了数据库的本地机器登陆或者使用安全的远程连接登陆,可以作为sysdba登录,在数据库级不需要提供密码。
2)sqlnet.ora文件中加入
SQLNET.AUTHENTICATION_SERVICES=(NTS)
SQLNET.AUTHENTICATION_SERVICES参数
在SQLNET.ORA(位于$ORACLE_HOME/NETWORK/ADMIN目录中)文件中,需要修改时直接用文本编辑器打开修改就行了,对于不同的操作系统SQLNET.AUTHENTICATION_SERVICES的取值会有些不一样,通常我们会用到下面的一些设置值:
- SQLNET.AUTHENTICATION_SERVICES = (ALL)
对Linux系统,支持OS认证和口令文件认证。
对Windows系统,实际实验是不支持此参数,验证失败。
- SQLNET.AUTHENTICATION_SERVICES = (NTS)
此设置值仅用于Windows NT系统,此设置同时支持OS认证和口令文件认证,只有在设置了(NTS)值之后运行在Windows系统上的Oracle才支持OS认证。
- SQLNET.AUTHENTICATION_SERVICES = (NONE)
此设置值在Windows和Linux是作用一样的,指定Oracle只使用口令文件认证。
- 不设置此参数或SQLNET.AUTHENTICATION_SERVICES =
对Linux系统,默认支持OS认证和口令文件认证。
对Windows系统,默认只支持口令文件认证,不支持OS认证。
下列方式都是使用os验证登陆
Sqlplus “/ as sysdba”
Sqlplus “sys/sys as sysdba”
Sqlplus “sys/sdf as sysdba” //sys口令错误
Sqlplus “scott/sdf as sysdba” //scott口令错误
以上登录方式都可以登录到数据库。只要是通过了服务器级别的认证就可以登录到数据库上(必须as sysdba)。不管数据库中是否存在登录的用户名或者密码的对错一律不校验。
此时show user 都是sys
说明;只要在登陆时有/ as sysdba。就使用os验证方式。不管是否是sys用户,或者密码是否正确,这样存在安全隐患。
2. 关闭os验证
1) 把操作系统用户的ORA_DBA组取消或者把当前登录用户从ora_dba组中删除。
2) sqlnet.ora文件SQLNET.AUTHENTICATION_SERVICES= (NONE) 关闭os认证方式
目录E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN>
2个条件满足任何一个即可。
二、Oracle的口令文件的作用是存放所有以sysdba或者sysoper权限连接数据库的用户的口令,如果想以sysdba权限远程连接数据库,必须使用口令文件,否则不能连上。
由于sys用户在连接数据库时必须以sysdba or sysoper方式,也就是说sys用户要想连接数据库必须使用口令文件。使用口令文件的好处是即使数据库不处于open状态,依然可以通过口令文件验证来连接数据库。开始安装完oracle,没有给普通用户授予sysdba权限,口令文件中只存放了sys的口令,如果之后把sysdba权限授予了普通用户,那么此时会把普通用户的口令从数据库中读到口令文件中保存下来,当然这时必须要求数据库处于open状态
1、使用口令文件验证
如果当前没有使用口令文件验证。可以采用如下方法开启口令文件验证。
1.建立口令文件
C:\>orapwd file=C:\oracle\ora92\database\pwdtest.ora password=admin entries=5
口令文件名格式
pwd + sid + .ora
必须按照这个格式命名。缺省情况下,windows下口令文件的格式是pwdsid.ora(大小写不敏感)
2.确认参数是否正确
Remote_login_passwordfile=exclusive
通过数据字典v$parameter来查看静态参数Remote_login_passwordfile的值
ex:select name,value from v$parameter where name = ‘Remote_login_passwordfile‘;
如果Remote_login_passwordfile的值不是exclusive那么可以通过alter system来修改初始化参数文件中的值。
Remote_login_passwordfile值保存在初始化参数文件中即spfile中,不是动态参数。故修改该参数的值后需要重启数据库重新加载spfile才能生效。
ex: SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
各参数值的含义:
None: 不使用口令文件验证,如果不使用口令文件验证时,没有用户在ora_dba组中,那么就没有任何用户可以作为sysdba进入数据库了。Oracle数据库不允许远 程SYSDBA/SYSOPER身份登录
Exclusive: 表示实例独占使用口令文件,也就是各自实例使用单独的口令文件
Shared 表示多个实例共享一个口令文件
注:
Shared说明
当remote_login_passwordfile=shared时候,
在C:\oracle\ora92\database目录下仍然生成pwd+sid.ora文件。每个数据库实例使用自己的sys用户和对应的密码,但是不能再加入新的有sysdba权限的用户
如果remote_login_passwordfile=exclusive 而且os中有ora_dba组。那么用户如果作为ora_dba组登陆的话。仍然可以使用os的验证
3.重新启动数据库,sys自动被加入到口令文件中
此时。口令文件中没有任何用户。因为刚建立起来。
通过查询 select * from v$pwfile_users; 可以知道
如果利用grant sysdba to sys; 把sys加入到口令文件。会报错。必须要重启,会自动把sys加入进去
4. 把system用户写入口令文件中
Grant sysdba to system;
授权命令成功后。
select * from v$pwfile_users;
可以看到system已经在口令文件中
注:忘记sys口令的话,3种做法都可以。
1)打开os认证方式,/as sysdba连接进去。 Alter user sys identified by "newPassword";
2)通过删除口令文件.然后用orapwd命令重新建立口令文件来做.但是需要重启数据库
3)如果没有启用OS认证登陆,则需要用orapwd重建口令文件
这个命令重新生成了数据库的密码文件。密码文件的位置在ORACLE_HOME目录下的\database目录下。
这个密码是修改sys用户的密码。除sys其他用户的密码不会改变。修改后重启oracle才能生效。