一个初学者困惑的Oracle的认证问题

  总有初学者问这个问题为什么Oracle 不要密码也可以进入。

  其实这就是Oracle设计的精巧之处。

 一.直接通过 sqlplus / as sysdba  方式登录。

  当我们安装了Oracle 之后,直接通过sql / as sysdba,就直接可以登录Oracle,即使设置了SYS用户的密码,完全没有效果。请注意该中情况只有在 

  用户已经登入OS ,完成了OS认证的情况下有效,如果通过 i sqlplus 是无法登录。而且以

  

View Code
1  sqlplus  sys123/123 as sysdba; --sys123这个用户,123这个密码都不存在。
2 sqlplus / as sysdba; --

  这两种可以正常登录。是不是由于Oracle 的认证失效了?不是。

  此时oracle 采用的默认 认证方式。即OS认证方式。

  我们如果是NT,平台,可以在用户组中找到,oracle_dba这个用户组,而且当前用户正在这个这个组中。 说明用户通过OS的认证方式,即也通过Orcle默认的认证方式。

  问题:一般OS管理人员,和 Oracle DBA 是由不同的团队组成的。这样如果OS 管理人员如果 对Oracle稍有了解的话,就可直接登录Oracle,而且是最高权限。存在很大的安全隐患。

  解决办法:

  1.从OS中将 oracle_dba这个用户组删除掉,或者将当前用户从改组中删除。这样Oracle 的OS认证无法通过。

  2.取消Oracle 的 OS 认证方式。

  在sqlnet.ora文件中有一个设置选项

  SQLNET.AUTHENTICATION_SERVIES  其有两个值

  SQLNET.AUTHENTICATION_SERVIES=(NTS)  --启用OS 认证模式

  SQLNET.AUTHENTICATION_SERVIES=(NONE)-- 关闭OS 认证模式

      关闭之后,通过 sqlplus / as sysdba;再也无法登录进系统。

  二. 通过  sqlplus sys/oracle 方式登录可以通过,。而通过sqlplus sysdba/oracle 无法通过

  首先区别DBA和 SYSDBA角色

  dba是一种role角色,对应的是对Oracle实例里系统的操作权限的集合,是实实在在存在在Oracle里的物理对象而

  sysdba是概念上的role,是一种登录认证时的身份标识而已,在OS认证时用到。

  

系统中只有dba权限。Sysdba权限是没有的。

--DBA具有的权限

select * from DBA_ROLES where role like 'DBA';

得到结果是具有DBA角色的用户,刚安装的会有sys用户,sys用户是数据库的拥有者,可以授予其他用户DBA角色。

 

--sysdba的权限

select * from DBA_ROLES where role like ‘SYSDBA';

 得到结果为空,因为SYSDBA这个角色根本不存在。

--查看那些对象有dba权限

Select * from dba_role_privs where granted_role like 'DBA';

Select * from dba_role_privs where granted_role like 'SYSDBA';

--查看那些用户有sysdba权限是通过 v$pwfile_users

Select * from v$pwfile_users;

  得到的结果是具有DBA角色的用户。

  所有,具有DBA角色的用户,通过口令文件认证的。是将密码通过加密后存入密码文件中。

  问题: 如果密码忘记了怎么办?

  先将口令文件删除,然后重建。

  

原文地址:https://www.cnblogs.com/jerryxing/p/2437986.html