面试宝典:介绍下Oracle数据库动态性能视图 V$PWFILE_USERS

在这里插入图片描述好的,我们来对 Oracle 19C 数据库中的 V$PWFILE_USERS 动态性能视图进行一次全面、深入的详解。

1. 作用与概述

V$PWFILE_USERS 视图的主要作用是列出当前被授予了 SYSDBASYSOPERSYSASMSYSBACKUPSYSDGSYSKM 等特殊管理权限的用户。这些权限允许用户执行超越其自身 schema 范围的、影响数据库实例本身的高级操作(如启动/关闭数据库、创建数据库、执行备份恢复等)。

关键点:

  • 只显示来自密码文件(Password File)的授权信息
  • 它不显示通过操作系统认证(如 OSDBA, OSOPER 组)或集中式用户管理(如 Oracle Internet Directory)获得这些权限的用户。
  • 这个视图对于监控和管理拥有最高数据库权限的用户至关重要,是数据库安全审计的关键部分。

2. 使用场景

  1. 安全审计与合规性检查:定期查询该视图,以确认哪些用户拥有超级权限,确保权限分配符合公司安全策略。
  2. 故障排除与连接问题:当用户尝试以 SYSDBA 身份连接失败时,可以检查此视图确认其权限是否已正确授予。
  3. 权限管理:在授予或撤销 SYSDBA 等权限后,立即查询此视图以验证操作是否成功。
  4. 环境确认:在陌生的数据库环境中,快速了解拥有特权的用户列表。

3. 字段含义详解

以下是 V$PWFILE_USERS 视图包含的字段及其详细含义。请注意,不同版本的 Oracle 可能字段略有不同,但核心字段一致。

字段名数据类型可选值(样例)含义详解
USERNAMEVARCHAR2(30)SYS, SYSTEM, DBA_USER被授予了管理权限的 Oracle 用户名。
SYSDBAVARCHAR2(5)TRUE, FALSE指示用户是否拥有 SYSDBA 权限。这是最高权限,允许用户执行任何数据库操作,包括启动和关闭数据库。
SYSOPERVARCHAR2(5)TRUE, FALSE指示用户是否拥有 SYSOPER 权限。此权限允许用户执行基本操作任务(如启动/关闭、备份、归档),但不能查看或修改用户数据。
SYSASMVARCHAR2(5)TRUE, FALSE仅适用于 Oracle Automatic Storage Management (ASM)。指示用户是否拥有管理 ASM 实例的权限。在数据库实例上查询此视图,此列对所有用户通常都为 FALSE
SYSBACKUPVARCHAR2(5)TRUE, FALSE指示用户是否拥有 SYSBACKUP 权限。此权限专门用于使用 RMAN 执行备份和恢复操作,比 SYSDBA 权限范围更小,更安全。
SYSDGVARCHAR2(5)TRUE, FALSE指示用户是否拥有 SYSDG 权限。此权限专门用于管理 Oracle Data Guard 配置。
SYSKMVARCHAR2(5)TRUE, FALSE指示用户是否拥有 SYSKM 权限。此权限专门用于管理透明数据加密(TDE)的密钥库(Keystore)。
CON_IDNUMBER0, 3, …容器 ID。在多租户环境中,标识该行数据属于哪个容器。0 表示该行适用于整个 CDB(所有 PDB)。对于非 CDB,此值为 0

4. 相关视图与基表

  • 相关视图

    • V$PWFILE_INFO:显示关于密码文件本身的信息,例如它所在的路径、是否启用了“忽略大小写”功能等。这是另一个非常重要的相关视图。
    • DBA_USERS:显示数据库中的所有用户。你可以通过连接 DBA_USERS.USERNAMEV$PWFILE_USERS.USERNAME 来获取更完整的用户信息(如账户状态、创建时间等)。
  • 基表

    • V$PWFILE_USERS 是一个动态性能视图,它没有直接对应的“基表”
    • 它的数据直接来源于内存中的数据库实例状态信息。更准确地说,当实例启动时,它会读取密码文件(orapw<ORACLE_SID>)并将其内容加载到内存中。V$PWFILE_USERS 视图正是反映了这份在内存中缓存的权限信息。
    • 密码文件本身可以看作是这个视图的“底层数据源”,但它是一个二进制文件,无法直接查询。

5. 底层详细原理

  1. 密码文件(Password File)

    • 这是一个存储在数据库服务器操作系统上的特殊二进制文件,通常名为 orapw<ORACLE_SID>(如 orapwORCL)。
    • 它由 orapwd 实用程序创建(例如:orapwd file=orapwORCL password=my_password entries=10)。entries 参数限制了可以在此文件中存储的特权用户数量。
    • 它的主要作用是在数据库实例未启动或处于非加载状态时,对试图以 SYSDBA 等权限连接的用户进行身份验证。因为此时数据字典还不可用,无法通过数据字典来验证权限。
  2. 身份验证流程

    • 当用户尝试 CONNECT / AS SYSDBA(操作系统认证)时,Oracle 会检查该用户是否属于操作系统的特定特权组(如 Windows 上的 ORA_DBA,Unix/Linux 上的 dba 组)。如果属于,则授权连接。此方式不会在 V$PWFILE_USERS 中体现
    • 当用户尝试 CONNECT username/password AS SYSDBA(密码文件认证)时:
      a. 实例检查提供的用户名和密码。
      b. 实例首先会查看内存中缓存的密码文件信息(即 V$PWFILE_USERS 的内容)。
      c. 如果在内存信息中找到了该用户并且密码哈希值匹配,且具有请求的权限,则授权连接。
      d. 如果实例刚刚启动,缓存信息尚未建立,则会直接去读取磁盘上的密码文件进行验证,验证成功后会将信息加载到内存中。
  3. 视图数据来源

    • V$PWFILE_USERS 的内容就是从步骤 2 中提到的内存中的缓存信息直接映射而来的。这就是为什么当你使用 GRANT SYSDBA TO scott; 授予权限后,无需提交(COMMIT)或等待,立即查询 V$PWFILE_USERS 就能看到变化的原因。授权操作直接更新了内存中的结构和磁盘上的密码文件。
  4. 与数据字典视图的区别

    • 特权权限(如 SYSDBA不是普通的数据库权限(如 CREATE TABLE)。它们不会被记录在 SYSTEM 表空间的数据字典表(如 SYS.SYSAUTH$)中。
    • 因此,你无法通过查询 DBA_SYS_PRIVS 等数据字典视图来获取这些信息,必须使用 V$PWFILE_USERS

6. 相关知识点介绍

  • 两种超级用户认证方式

    1. 密码文件认证:需要提供用户名和密码。信息存储在密码文件中,并体现在 V$PWFILE_USERS 里。
    2. 操作系统认证:将操作系统用户加入特定的 OSDBA/OSOPER 组(如 dba),连接时使用 CONNECT / AS SYSDBA这种方式不会在 V$PWFILE_USERS 中显示。Oracle 优先使用操作系统认证。
  • REMOTE_LOGIN_PASSWORDFILE 参数:

    • 这个初始化参数决定了密码文件的使用方式。
    • NONE:禁用密码文件认证,只允许操作系统认证。
    • EXCLUSIVE:(默认值)密码文件只能被一个数据库使用,并且可以包含除 SYS 以外的用户。
    • SHARED:多个数据库共享一个密码文件,但此文件中只能识别 SYS 用户。
    • 要使用 V$PWFILE_USERS 并管理多个特权用户,此参数必须设置为 EXCLUSIVE
  • 密码文件的管理

    • 添加用户GRANT SYSDBA TO username;
    • 移除用户REVOKE SYSDBA FROM username;
    • 修改密码ALTER USER username IDENTIFIED BY new_password; (注意:以 SYSDBA 连接后,可以为任何用户修改密码,包括自身)。
    • 如果 entries 参数设定的数量不足,需要使用 orapwd 命令重建一个更大的密码文件。

7. 常用查询 SQL

  1. 查询所有拥有特权权限的用户

    SELECT * FROM V$PWFILE_USERS ORDER BY USERNAME;
    
  2. 查询拥有 SYSDBA 权限的用户

    SELECT USERNAME FROM V$PWFILE_USERS WHERE SYSDBA = 'TRUE';
    
  3. 查询拥有 SYSBACKUP 或 SYSDG 权限的用户(用于审计)

    SELECT USERNAME, SYSBACKUP, SYSDG
    FROM V$PWFILE_USERS
    WHERE SYSBACKUP = 'TRUE' OR SYSDG = 'TRUE';
    
  4. 联合 DBA_USERS 视图,查看特权用户的账户状态(非常实用):

    SELECT p.USERNAME, p.SYSDBA, p.SYSOPER, p.SYSBACKUP, d.ACCOUNT_STATUS
    FROM V$PWFILE_USERS p
    JOIN DBA_USERS d ON p.USERNAME = d.USERNAME
    ORDER BY p.USERNAME;
    

    这可以帮你发现那些拥有特权但账户已被锁定的安全风险。

  5. 查看密码文件本身的信息

    SELECT * FROM V$PWFILE_INFO;
    

    这会返回文件路径、大小、是否忽略大小写等信息。

希望这份详尽的解释能帮助您完全理解 V$PWFILE_USERS 视图。

欢迎关注我的公众号《IT小Chen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值