it编程 > 数据库 > Oracle

Oracle数据库OS认证与口令认证的区别是什么

48人参与 2026-09-02 Oracle

oracle数据库有两种安全验证模式:os认证和口令(密码)认证

一、os认证

oracle的os认证(操作系统认证)是一种安全验证模式,它允许特定的操作系统用户无需提供数据库密码即可登录数据库,并通常被授予sysdbasysoper等最高管理权限。

这种认证方式的核心思想是将用户的身份验证工作从数据库层面转移到操作系统层面。

1.1 工作原理

当一个用户尝试通过os认证连接数据库时(例如使用sqlplus / as sysdba命令),oracle数据库会执行以下检查:

  1. 检查组关系:数据库会检查当前登录操作系统的用户,是否属于一个特定的操作系统用户组。这个组通常被称为osdba组。

  2. 授予权限:如果该用户确实在osdba组中,oracle就会信任操作系统的验证结果,允许该用户以sysdba身份登录,而不再要求输入数据库密码。

1.2 验证

1、操作系统验证

我们可以将新建立用户或者把原来的用户加入到oinstall组或dba等组中,然后使用这个用户在安装了数据库的本地机器登陆或者使用安全的远程连接登陆,可以作为sysdba登录,在数据库级不需要提供密码。

2、命令验证

3、sqlnet.ora文件中加入 ,文件位置在 $oracle_home/network/admin目录下

sqlnet.authentication_services=(nts)  #这一种模式只支持windows nt系统

linux下默认是支持os认证和口令(密码)认证的所以不需要修改sqlnet.ora

1.3 关闭os认证

sqlnet.authentication_services = (none)     # 关闭os认证方式

2个条件满足一个即可关闭os认证

二、口令验证

2.1 使用口令文件验证

如果当前没有使用口令文件验证。可以采用如下方法开启口令文件验证。

1.修改sqlnet.ora里的参数

sqlnet.authentication_services = (none) //关闭os认证方式,打开口令认证方式

2.建立口令文件 (口令文件丢失或者口令文件损坏,无法使用口令登录时重建)

默认格式

orapwd file=\$oracle_home/dbs/orapw$oracl_sid password=<password> force=y  # 其中force=y为覆盖老密码文件

如果出现

opw-00029: password complexity failed for sys user : password must contain at least 8 characters.

说明要满足oracle对密码复杂度。因为oracle 12.2以后增强了密码强度的要求,但是如果您依旧想使用短密码的话可以写成

orapwd file=$oracle_home/dbs/orapworcl password=oracle force=y format=12  # format=12使用12.2之前的密码验证模式

当上面两个步骤生效后,我们发现之前的sqlplus / as sysdba无法进入到oracle sys用户下:

然后我们可以使用以下两种方式登录oracle

第一种是隐式输入账号密码

第二种是显示输入(不推荐,数据库的密码直接明文显示,具有安全隐患)

在口令验证的情况下,如果你把密码忘记了,可以使用如下方式修改

1.重建密码文件

2.改回到os认证模式,进入到sys用户下,使用如下命令修改密码:

2.2 remote_login_passwordfile参数

在某些情况下可以使用remote_login_passwordfile参数增强系统的安全性,所谓提高安全性就是禁止以sysdba或sysoper特权用户从客户端登陆到数据库系统中。这是一种牺牲管理便捷性提升安全性为前提的。需酌情使用。

使用show parameter remote_login;来查看当前参数的值

2.2.1 remote_login_passwordfile参数详解

在此总结一下在remote_login_passwordfile参数取不同值时的行为特性。 remote_login_passwordfile参数可以有三种取值:exclusive(默认)、none和shared。

1)当取值为exclusive时 允许客户端以sysdba或sysoper权限登录到数据库实例中完成数据库管理操作; 允许授予和回收sysdba或sysoper权限。(允许你在sys用户下使用alter user sys identified by xxx;给sys用户修改密码的) )

2)当取值为none时 禁止客户端以sysdba或sysoper权限登录到数据库实例中完成数据库管理操作; 禁止授予和回收sysdba或sysoper权限。

3)当取值为shared时 允许客户端以sysdba或sysoper权限登录到数据库实例中完成数据库管理操作; 禁止授予和回收sysdba或sysoper权限。(不允许你在sys用户下使用alter user sys identified by xxx;给sys用户修改密码的)

以上便是参数remote_login_passwordfile在不同取值情况下对系统的影响。每一种取值都有其自己的应用场景。我们需要做的是根据不同的场景做出相应的取舍。

2.2.2remote_login_passwordfile参数修改

alter system set remote_login_passwordfile=shared scope=spfile;

sql> show parameter remote_login_passwordfile;

name                                 type        value
------------------------------------ ----------- ------------------------------
remote_login_passwordfile            string      shared
-- 可见当前值已经变成了shared

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

您想发表意见!!点此发布评论

推荐阅读

Oracle之使用DML语言管理表指南

09-02

Oracle TO_CHAR TO_DATE TO_NUMBER函数使用教程

09-02

Oracle单行函数怎么用?大小写转换与字符操作函数实例

09-02

Oracle一次ORA-12514错误问题分析及解决过程

09-02

Oracle数据库逗号拼接字段处理

09-03

Oracle 23c配置和使用数据脱敏的完整流程

09-01

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论