1、os认证
oracle安装之后默认情况下是启动os认证。os认证的意思是把登录到数据库的用户和口令校验放在了操作系统一级。如果以安装oracle时的用户登录os ,那么登录oracle数据库时不需要任何验证如:
SQL> conn test/oracle as sysdba
Connected.
SQL> conn test/oracle@orcl as sysdba
Connected.
SQL> conn /as sysdba
Connected.
SQL> conn ss/ss as sysdba
Connected.
SQL> conn ss/ss@orcl as sysdba
Connected.
SQL> conn test/ss@orcl as sysdba
Connected.
SQL> conn test/oracle@orcl as sysdba
Connected.
不论输入什么用户,那怕该用户不存在,只要一sysdba的权限连接都可以连接,这样在虽然很方便但是很不安全。
这是我们可以把oracle_home/NETWORK/admin/sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES= (nts)nts改成none或者注释掉这句话(在前面加上#),就可以屏蔽os功能,要想sys用户连接数据库必须输入正确的口令,或者将该用户从ora_dba组删除。
SQLNET.AUTHENTICATION_SERVICES=(NTS)|(NONE) |(ALL)
SQLNET.AUTHENTICATION_SERVICES=(NTS): 操作系统认证方式,不使用口令文件
SQLNET.AUTHENTICATION_SERVICES=(NONE):口令文件认证方式
SQLNET.AUTHENTICATION_SERVICES=(ALL):两种都采用
2、参数remote_login_passwordfile
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登录
3,、oracle口令文件
oracle的口令文件的作用是存放所有已sysdba或者sysoper权限的连接数据的用户,使用口令文件的好处就是,在数据关闭的情况下,依然可以通过口令文件验证来连接数据库。默认路径是(oracle_home/database/pwdsid.ora)
(1)口令文件用户的查看,添加,删除
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
TEST TRUE FALSE
SQL> revoke sysdba from test;
Revoke succeeded.
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
SQL> grant sysdba to test;
Grant succeeded.
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
TEST TRUE FALSE
(2)口令文件的建立
C:\ >ORAPWD FILE=< FILENAME > PASSWORD
=< PASSWORD > ENTRIES=< MAX_USERS > FORCE=
---- 各命令参数的含义为:
---- FILENAME:密码文件名;
---- PASSWORD:设置INTERNAL/SYS帐号的口令;
---- MAX_USERS:密码文件中可以存放的最大用户数
-----force:默认值是n,他的作用类似也创建表空间时的reuse
(3)sys密码丢失的处理办法
首先要保证remote_login_passwordfile=shared
1).查询视图V$PWFILE_USERS,select * from V$PWFILE_USERS;
记录下拥有 SYSOPER/SYSDBA 系统权限的用户 信息
2).关闭数据库 shutdown immediate
3).删除密码文件,文件路径一般为:ORACLE_HOME\DATABASE,文件名为 PWD
4).创建密码文件
ORAPWD FILE=< FILENAME > PASSWORD =< PASSWORD >
5).向密码文件中增加用户
CONNECT SYS/internal_user_passsword AS SYSDBA;
启动数据库实例并打开数据库; 创建相应用户帐号,对其授权
授予 权限:GRANT SYSDBA TO user_name(如果先前数据库 只有sys具有sysdba权限,可不做这步)
6).修改密码文件状态,默认密码文件的状态shared,要将初始化参数里的
REMOTE_LOGIN_PASSWORDFILE 设置成EXCLUSIVE
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
4、总结
从上面的分析可以看出,当以sysdba/sysoper登录数据库时,主要是有sqlnet.ora,口令文件,参数remote_login_passwordfile
决定的,所以
当SQLNET.AUTHENTICATION_SERVICES=(NONE),REMOTE_LOGIN_PASSWORDFILE=(NONE)是一定不可以以sysdba登录数据库的。