总有初学者问这个问题为什么Oracle 不要密码也可以进入。
其实这就是Oracle设计的精巧之处。
一.直接通过 sqlplus / as sysdba 方式登录。
当我们安装了Oracle 之后,直接通过sql / as sysdba,就直接可以登录Oracle,即使设置了SYS用户的密码,完全没有效果。请注意该中情况只有在
用户已经登入OS ,完成了OS认证的情况下有效,如果通过 i sqlplus 是无法登录。而且以
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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角色的用户,通过口令文件认证的。是将密码通过加密后存入密码文件中。
问题: 如果密码忘记了怎么办?
先将口令文件删除,然后重建。