陈老师:1415968548 郑老师:2735197625 乐老师:354331153
客服热线:
19941464235/19906632509(微信同号)

客服微信

【Oracle OCP】19c密码文件认证

作者:炎燚小寶
发布时间:2023-12-19 09:25
浏览量:526

本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。


Oracle 用户登录数据库时有三种验证方式,分别为:

(1)操作系统验证:即,Oracle 用户只要能够登录操作系统,在登录数据库时不需要验证用户名和密码。此种登录方式只有在服务器本机登录有效,不适用于远程登录。

(2)密码文件验证:使用密码文件中保存的用户和密码登录数据库。

(3)数据字典验证:使用数据字典中的用户和密码登录数据库,一般用于普通用户的登录验证。


这里重点讲下密码文件

密码文件验证是指通过密码文件校验用户名和密码正确与否。

Oracle 的密码文件保存着具有 sysdba、sysoper 权限的用户名及口令。即使数据库没有处于 open 状态,也可以通过密码文件验证来连接数据库。如果没有密码文件,在数据库未启动之前只能通过操作系统验证。

远程登录不能使用操作系统验证,只能使用密码文件验证,要想以 sysdba 权限远程连接数据库,必须使用密码文件。密码文件默认保存了 sys 用户以及密码,如果把 sysdba 权限授予普通用户,则普通用户的用户名以及密码也会保存到密码文件中。

密码文件的位置与名称为:$ORACLE_HOME/dbs/orapw

cd $ORACLE_HOME/dbs
ll orapwORCLCDB


测试密码文件登录

--查看当前的sysdba用户
SQL> select * from v$pwfile_users;

/*
如果密码文件不存在或者名称错误,查询v$pwfile_users将得到空记录
添加sysdba等权限用户,会记录到密码文件和v$pwfile_users中
到回收sysdba等权限用户,密码文件记录依然存在,但是v$pwfile_users中无对应记录
*/


-- 把 sysdba 权限授予普通用户 APP
SQL> grant sysdba to APP;
Grant succeeded.

/*
remote_login_passwordfile= NONE | EXCLUSIVE | SHARED
 说明:该参数有三个取值,含义如下:
(1)NONE: 不使用密码文件,使用操作系统验证
(2)EXCLUSIVE(默认值): 密码文件验证。以独占模式使用密码文件,此时在数据库中可以执行对于 sysdba 用户的增加,修改,删除操作
(3)SHARED: 密码文件验证。密码文件可以被一台服务器上的多个数据库或者 RAC 集群数据库共享;shared 下的密码文件不可被修改,这意味着无法授权 sysdba 
权限给非 sys 用户,也不允许修改 sysdba 权限用户的密码,包括 sys 用户的密码。
Oracle 建议首先将需要 sysdba 权限的用户在 exclusive 模式下设置好,然后再将 REMOTE_LOGIN_PASSWORDFILE 修改为 shared。
*/

4.Oracle寻找口令文件的顺序:orapw$ORACLE_SID --> orapw --> Failure
SQL> select * from v$pwfile_users;


使用 APP用户登录数据库:

 
1) 以普通方式登录
@pdb2> conn APP/oracle@pdb2
ERROR:
ORA-01045: user APP lacks CREATE SESSION privilege; logon denied

SYS@pdb2> grant connect to APP;
Grant succeeded.

@pdb2> conn APP/oracle@pdb2
Connected.
Session altered.

APP@pdb2> show user
USER is "APP"

2)以sysdba登录
@pdb2> conn APP/oracle@pdb2 as sysdba
Connected.
Session altered.
SYS@pdb2> show user
USER is "SYS"


重建密码文件:可以解决密码文件损坏,口令丢失

# 删除密码文件
 rm orapwORCLCDB
 
#验证 sys登录失败
[oracle@database ~]$ sqlplus sys/oracle@pdb2 as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jul 22 10:50:39 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied


#验证授权sysdba的用户登录成功
[oracle@database ~]$ sqlplus app/oracle@pdb2 as sysdba   
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jul 22 10:50:51 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Session altered.
SYS@pdb2> show user
USER is "SYS"

# 重建密码文件,并设置密码
 orapwd file=orapwORCLCDB password=oracle
 
 
#查看密码文件
SQL> select * from v$pwfile_users;

#验证登录成功
 sqlplus sys/oracle@pdb2 as sysdba