暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

IC,IP,IQ卡,统统告诉我密码

SIT部落 2018-07-10
305

话说大张江有处仙乡,唤做SIT部落。仙女老爷们的日常便是把机房的各色设备连来倒去,探究万物的兼容调和之法。小仙惫懒, Oracle系列都这开头......




言归正传:今儿我们来聊聊Oracle数据库的密码文件



What

Oracle 数据库密码文件是用来存放oracle数据库中具有SYSOPER/SYSDBA系统权限的用户密码信息的,非SYSOPER/SYSDBA系统权限的用户密码信息不会保存在oracle数据库的密码文件中。


Why

如果DBA想要启动一个数据库实例,Oracle必须有一种方式能核实该DBA用户,确认该DBA用户是否有启动数据库实例的权限。

通过上面的描述,我们知道DBA的密码是不能保存在数据库当中的,这是为什么呢?因为如果密码保存在数据库里面,我们只有启动了数据库实例之后才能验证DBA的密码是否正确,这样岂不是本末倒置了。因此,DBA的认证只能放到oracle数据库的外面。

有两种DBA的认证机制,一种是通过密码文件审核,另外一种是通过操作系统审核。


How

1. 操作系统审核

如果你是在Oracle数据库的服务器端,可以这样登录数据库


oracle$ sqlplus nolog

SQL> conn assysdba

SQL> show user

USER is "SYS"


有没有注意到,在你没有输入用户名和密码的情况下,竟然以超级管理员用户sys登录进了oracle数据库,牛掰啊。 各位同学可以想一下,为什么不需要输入密码就可以以sys用户登录。

上面这种登录方式叫做超级用户的操作系统审核,这是通过操作系统来判断当前oracle用户是否属于dba组来决定的。


# id oracle

uid=1101(oracle) gid=1010(oinstall) =1010(oinstall),1021(asmdba),1031(dba),1032(oper)


也就是说,因为oracle用户是属于dba组的,所以在服务器端以oracle用户登录数据库不需要输入用户名和密码就可以登录sys用户。

更进一步,其实不管有没有用户存在,只要是以oracle用户登录进操作系统并且oracle属于dba组,就可以以sys用户登录oracle数据库。

例如:


SQL> conn abc/abc as sysdba

Connected.

SQL> show user

USER is "SYS"

SQL>

// 上面的数据库用户abc实际上是不存在的


聪明的同学肯定猜到了,想要取消操作系统审核就是把oracle用户从dba组里面删掉。


[root@centos-vm ~]# gpasswd-d oracle dba

正在将用户“oracle”“dba”组中删除

# id oracle          

uid=1101(oracle) gid=1010(oinstall) =1010(oinstall),1021(asmdba),1032(oper)


这个时候再尝试用缺省方式登录


SQL>  conn as sysdba      

ERROR:

ORA-01017: invalid username/password; logon denied

Warning: You are no longer connected to ORACLE.

SQL>

// 登录失败,因为oracle不属于dba组

关闭操作系统审核的另外一种方式是通过编辑配置文件

/u01/app/oracle/product/12.2.0/dbhome_1/network/admin/sqlnet.ora

在里面增加一行SQLNET.AUTHENTICATION_SERVICES=(none)。这个时候不管oracle是否属于dba组,也不能通过操作系统审核登录到oracle数据库。


2. 密码文件审核

密码文件的存放路径:

$ORACLE_HOME/dbs/orapw$ORACLE_SID  on unix and linux

$ORACLE_HOME/database/PWD%ORACLE_SID%.ora on windows.

例如我的密码文件是:

$ls -l/u01/app/oracle/product/12.2.0/dbhome_1/dbs/orapworcl1

密码文件是个二进制文件,不能用文本编辑器打开,可以通过strings查看


密码文件的相关参数

这个初始化参数 remote_login_passwordfile指定了是否使用密码文件来验证DBA用户的登录。取值可以是 shared,exclusive(默认)和none


1)当取值为EXCLUSIVE时

允许客户端以SYSDBA或SYSOPER权限登录到数据库实例中完成数据库管理操作;

允许授予和回收SYSDBA或SYSOPER权限。


2)当取值为NONE时

禁止客户端以SYSDBA或SYSOPER权限登录到数据库实例中完成数据库管理操作;

禁止授予和回收SYSDBA或SYSOPER权限。


3)当取值为SHARED时

允许客户端以SYSDBA或SYSOPER权限登录到数据库实例中完成数据库管理操作;

禁止授予和回收SYSDBA或SYSOPER权限。


怎么修改参数的取值呢?可以回看我们参数文件那一期。


通过密码文件登录oracle数据库


SQL> conn sys/password123! as sysdba

Connected to an idle instance.

SQL> show user

USER is "SYS"


删除密码文件

如果把密码文件orapworcl1删除了的话,就不能通过密码文件审核的方式登录数据库了。

SQL> conn sys/password123! as sysdba

ERROR:

ORA-01017: invalid username/password; logon denied


Warning: You are no longer connected to ORACLE.

SQL>


那问题来了,这个时候操作系统审核关闭,密码文件也被删除了,怎么才能用sys用户登录数据库呢?


手动创建密码文件

oracle提供了一个命令,可以在密码文件丢失的情况下,手动创建密码文件


orapwd file=/u01/app/oracle/product/12.2.0/dbhome_1/dbs/orapworcl1 password=password123!


这样就可以重新通过密码文件验证的方式登录oracle数据库。



操作系统审核的优先级高于密码文件的审核,但是一般为了安全考虑,会关闭操作系统审核。个人感觉,如果能接触到物理机,任何审核方式都是失效的。

文章转载自SIT部落,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论