1. 首页 > Oracle教程 > 正文

Oracle教程FG374-PDB安全

本文档风哥主要介绍Oracle数据库PDB安全相关知识,包括PDB安全的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 PDB安全的概念

Oracle数据库PDB安全是指在多租户容器数据库(CDB)中保护PDB数据安全,包括用户管理、权限管理、审计、加密等功能。PDB安全可以实现数据的隔离和保护,提高数据库的安全性。PDB安全包括用户管理、角色管理、权限管理、审计、加密等组件。更多视频教程www.fgedu.net.cn

PDB安全的特点:

  • 支持PDB级别的用户管理
  • 支持PDB级别的权限管理
  • 支持PDB级别的审计
  • 支持PDB级别的加密
  • 提高数据库安全性

1.2 PDB安全的方法

Oracle数据库PDB安全的方法:

  • 用户管理:管理PDB用户
  • 角色管理:管理PDB角色
  • 权限管理:管理PDB权限
  • 审计:审计PDB操作
  • 加密:加密PDB数据

1.3 PDB安全的要求

Oracle数据库PDB安全的要求:

  • CDB架构:必须在CDB架构中配置安全
  • 系统资源:足够的CPU、内存和磁盘空间
  • 权限:需要SYSDBA权限
  • 兼容性:Oracle数据库版本必须支持PDB安全
  • 配置:需要配置适当的参数和选项
风哥提示:PDB安全是Oracle数据库多租户架构的核心功能,通过PDB安全,可以实现数据的隔离和保护,提高数据库的安全性。

Part02-生产环境规划与建议

2.1 PDB安全规划

Oracle数据库PDB安全规划要点:

# PDB安全规划步骤
1. 分析业务需求
2. 评估系统资源
3. 设计安全方案
4. 规划安全架构
5. 规划用户管理
6. 规划权限管理
7. 测试和验证

# 适用场景
– 多租户数据库
– 需要数据隔离的系统
– 需要数据保护的系统
– 需要审计的系统
– 需要加密的系统

# 不适用场景
– 单租户数据库
– 安全需求简单的系统
– 低安全需求系统

2.2 PDB安全设计

Oracle数据库PDB安全设计建议:

# PDB安全设计原则
– 基于业务需求设计
– 基于资源需求设计
– 最小化权限
– 最大化安全性
– 合理配置参数

# PDB安全设计策略
– 合理规划安全架构
– 配置适当的用户管理
– 配置适当的权限管理
– 配置适当的审计
– 配置适当的加密

# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计安全方案
4. 规划安全架构
5. 测试安全效果
6. 调整配置

2.3 PDB安全最佳实践

Oracle数据库PDB安全最佳实践:

  • 规划安全架构:根据业务需求规划安全架构,最小化权限
  • 配置用户管理:为PDB配置合理的用户管理
  • 监控安全事件:监控安全事件,及时发现和处理问题
  • 定期审计:定期审计PDB操作,确保数据安全
  • 设置安全告警:设置安全告警,及时发现安全问题
  • 定期review:定期review安全配置,优化安全策略
生产环境建议:PDB安全规划应基于业务需求和系统资源,规划安全架构,配置用户管理,监控安全事件,定期审计,设置安全告警,定期review,确保数据安全。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 PDB安全实施

3.1.1 配置用户管理

# 查看PDB
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;

CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE

# 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;

Session altered.

# 查看用户
SQL> SELECT username, account_status, created FROM dba_users ORDER BY username;

USERNAME ACCOUNT_STATUS CREATED
—————————— ————— ———
DBSNMP OPEN 01-JAN-26
SYS OPEN 01-JAN-26
SYSTEM OPEN 01-JAN-26

# 创建用户
SQL> CREATE USER fgfgfgsales_admin IDENTIFIED BY “Sales123#”
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 100M ON users;

User created.

SQL> CREATE USER fgfgfgsales_user IDENTIFIED BY “Sales123#”
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 50M ON users;

User created.

# 查看用户
SQL> SELECT username, account_status, created FROM dba_users ORDER BY username;

USERNAME ACCOUNT_STATUS CREATED
—————————— ————— ———
DBSNMP OPEN 01-JAN-26
SALES_ADMIN OPEN 31-MAR-26
SALES_USER OPEN 31-MAR-26
SYS OPEN 01-JAN-26
SYSTEM OPEN 01-JAN-26

# 验证用户创建成功

3.1.2 配置角色管理

# 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;

Session altered.

# 查看角色
SQL> SELECT role FROM dba_roles ORDER BY role;

ROLE
——————————
CONNECT
DBA
EXP_FULL_DATABASE
IMP_FULL_DATABASE
RESOURCE
SCHEDULER_ADMIN

# 创建角色
SQL> CREATE ROLE fgfgfgsales_read_role;

Role created.

SQL> CREATE ROLE fgfgfgsales_write_role;

Role created.

# 查看角色
SQL> SELECT role FROM dba_roles ORDER BY role;

ROLE
——————————
CONNECT
DBA
EXP_FULL_DATABASE
IMP_FULL_DATABASE
RESOURCE
SALES_READ_ROLE
SALES_WRITE_ROLE
SCHEDULER_ADMIN

# 验证角色创建成功

3.2 PDB安全配置

3.2.1 配置权限管理

# 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;

Session altered.

# 授予角色权限
SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO fgfgfgsales_read_role;

Grant succeeded.

SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, INSERT, UPDATE, DELETE TO fgfgfgsales_write_role;

Grant succeeded.

# 授予用户角色
SQL> GRANT fgfgfgsales_read_role TO fgfgfgsales_user;

Grant succeeded.

SQL> GRANT fgfgfgsales_write_role TO fgfgfgsales_admin;

Grant succeeded.

# 查看用户权限
SQL> SELECT grantee, granted_role FROM dba_role_privs WHERE grantee IN (‘SALES_ADMIN’, ‘SALES_USER’) ORDER BY grantee, granted_role;

GRANTEE GRANTED_ROLE
———- ——————
SALES_ADMIN SALES_WRITE_ROLE
SALES_USER SALES_READ_ROLE

# 验证权限配置成功

3.2.2 配置审计

# 切换到CDB
SQL> ALTER SESSION SET CONTAINER = cdb$root;

Session altered.

# 查看审计状态
SQL> SELECT name, value FROM v$parameter WHERE name = ‘audit_trail’;

NAME VALUE
———————————— ——————————
audit_trail DB

# 配置审计
SQL> ALTER SYSTEM SET audit_trail = DB SCOPE = SPFILE;

System altered.

# 重启数据库
SQL> SHUTDOWN IMMEDIATE;

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> STARTUP;

ORACLE instance started.

Total System Global Area 838860800 bytes
Fixed Size 9140416 bytes
Variable Size 503316480 bytes
Database Buffers 318767104 bytes
Redo Buffers 7737600 bytes
Database mounted.
Database opened.

# 验证审计状态
SQL> SELECT name, value FROM v$parameter WHERE name = ‘audit_trail’;

NAME VALUE
———————————— ——————————
audit_trail DB

# 配置PDB审计
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;

Session altered.

# 审计用户登录
SQL> AUDIT SESSION BY fgfgfgsales_admin;

Audit succeeded.

# 审计表操作
SQL> AUDIT TABLE, UPDATE TABLE, DELETE TABLE BY fgfgfgsales_admin BY ACCESS;

Audit succeeded.

# 查看审计配置
SQL> SELECT user_name, audit_option, success, failure FROM dba_audit_trail_options WHERE user_name = ‘SALES_ADMIN’;

USER_NAME AUDIT_OPTION SUCCESS FAILURE
———— —————– ——— ———
SALES_ADMIN SESSION BY ACCESS BY ACCESS
SALES_ADMIN TABLE BY ACCESS BY ACCESS
SALES_ADMIN UPDATE TABLE BY ACCESS BY ACCESS
SALES_ADMIN DELETE TABLE BY ACCESS BY ACCESS

# 验证审计配置成功

3.3 PDB安全验证

3.3.1 验证PDB用户管理

# 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;

Session altered.

# 查看用户
SQL> SELECT username, account_status, created FROM dba_users ORDER BY username;

USERNAME ACCOUNT_STATUS CREATED
—————————— ————— ———
DBSNMP OPEN 01-JAN-26
SALES_ADMIN OPEN 31-MAR-26
SALES_USER OPEN 01-JAN-26
SYS OPEN 01-JAN-26
SYSTEM OPEN 01-JAN-26

# 测试用户登录
$ sqlplus fgfgfgsales_admin/”Sales123#”@fgfgfgsalespdb

SQL*Plus: Release 19.0.0.0.0 – Production on Fri Mar 31 10:00:00 2026
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

SQL> SHOW USER;

USER is “SALES_ADMIN”

SQL> SELECT con_id, name FROM v$pdbs;

CON_ID NAME
—— ———
3 SALESPDB

# 验证用户管理成功

3.3.2 验证PDB审计

# 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;

Session altered.

# 查看审计记录
SQL> SELECT username, action_name, obj_name, timestamp FROM dba_audit_trail WHERE username = ‘SALES_ADMIN’ ORDER BY timestamp DESC FETCH FIRST 10 ROWS ONLY;

USERNAME ACTION_NAME OBJ_NAME TIMESTAMP
———- ————– ———— ——————-
SALES_ADMIN LOGON 31-MAR-26 10:00:00
SALES_ADMIN LOGON 31-MAR-26 09:55:00
SALES_ADMIN LOGON 31-MAR-26 09:50:00
SALES_ADMIN LOGON 31-MAR-26 09:45:00
SALES_ADMIN LOGON 31-MAR-26 09:40:00

# 测试审计
SQL> CREATE TABLE test_audit (
id NUMBER,
name VARCHAR2(100)
);

Table created.

SQL> INSERT INTO test_audit (id, name) VALUES (1, ‘Test Audit’);

1 row created.

SQL> COMMIT;

Commit complete.

# 查看审计记录
SQL> SELECT username, action_name, obj_name, timestamp FROM dba_audit_trail WHERE username = ‘SALES_ADMIN’ ORDER BY timestamp DESC FETCH FIRST 10 ROWS ONLY;

USERNAME ACTION_NAME OBJ_NAME TIMESTAMP
———- ————– ———— ——————-
SALES_ADMIN CREATE TABLE TEST_AUDIT 31-MAR-26 10:01:00
SALES_ADMIN INSERT TEST_AUDIT 31-MAR-26 10:01:00
SALES_ADMIN LOGON 31-MAR-26 10:00:00
SALES_ADMIN LOGON 31-MAR-26 09:55:00
SALES_ADMIN LOGON 31-MAR-26 09:50:00

# 验证PDB审计成功

风哥提示:验证PDB安全是否成功,需要检查用户管理、角色管理、权限管理、审计、加密等,确保数据库运行正常。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 PDB安全案例

在某企业的生产环境中,需要为PDB配置安全。

# 案例背景
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:为PDB配置安全

# 实施方案
1. 查看PDB
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;

CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE

2. 创建用户
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;

Session altered.

SQL> CREATE USER fgfgfgsales_admin IDENTIFIED BY “Sales123#”
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 100M ON users;

User created.

3. 创建角色
SQL> CREATE ROLE fgfgfgsales_read_role;

Role created.

SQL> CREATE ROLE fgfgfgsales_write_role;

Role created.

4. 配置权限
SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO fgfgfgsales_read_role;

Grant succeeded.

SQL> GRANT fgfgfgsales_read_role TO fgfgfgsales_user;

Grant succeeded.

5. 验证安全配置
SQL> SELECT username, account_status FROM dba_users WHERE username = ‘SALES_ADMIN’;

USERNAME ACCOUNT_STATUS
—————————— —————
SALES_ADMIN OPEN

# 实施效果
– 成功配置PDB安全
– 用户管理正常
– 角色管理正常
– 权限管理正常
– 数据安全性提高

4.2 PDB安全优化案例

在某金融机构的生产环境中,需要优化PDB安全,提高数据保护级别。

# 案例背景
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:PDB安全需要优化

# 优化方案
1. 查看安全配置
SQL> SELECT name, value FROM v$parameter WHERE name = ‘audit_trail’;

NAME VALUE
———————————— ——————————
audit_trail DB

2. 优化安全配置
SQL> ALTER SYSTEM SET audit_trail = DB, EXTENDED SCOPE = SPFILE;

System altered.

SQL> ALTER SYSTEM SET audit_sys_operations = TRUE SCOPE = SPFILE;

System altered.

3. 重启数据库
SQL> SHUTDOWN IMMEDIATE;

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> STARTUP;

ORACLE instance started.

Total System Global Area 838860800 bytes
Fixed Size 9140416 bytes
Variable Size 503316480 bytes
Database Buffers 318767104 bytes
Redo Buffers 7737600 bytes
Database mounted.
Database opened.

4. 验证优化效果
SQL> SELECT name, value FROM v$parameter WHERE name IN (‘audit_trail’, ‘audit_sys_operations’);

NAME VALUE
———————————— ——————————
audit_sys_operations TRUE
audit_trail DB, EXTENDED

# 优化效果
– 安全配置优化
– 审计级别提高
– 数据保护提高
– 安全性提高

4.3 PDB安全问题处理

在某电商网站的生产环境中,PDB安全出现问题,需要处理。

# 问题现象
– 用户无法登录
– 权限不足
– 审计失败

# 分析步骤
1. 查看用户状态
SQL> SELECT username, account_status, lock_date FROM dba_users WHERE username = ‘SALES_ADMIN’;

USERNAME ACCOUNT_STATUS LOCK_DATE
—————————— ————— ———
SALES_ADMIN LOCKED 31-MAR-26

2. 查看审计记录
SQL> SELECT username, action_name, returncode FROM dba_audit_trail WHERE username = ‘SALES_ADMIN’ AND returncode != 0 ORDER BY timestamp DESC FETCH FIRST 10 ROWS ONLY;

USERNAME ACTION_NAME RETURNCODE
———- ————– ———–
SALES_ADMIN LOGON 1017
SALES_ADMIN LOGON 1017
SALES_ADMIN LOGON 1017

# 问题原因
– 用户密码错误次数过多
– 用户被锁定
– 审计失败

# 解决方案
1. 解锁用户
SQL> ALTER USER fgfgfgsales_admin ACCOUNT UNLOCK;

User altered.

2. 重置密码
SQL> ALTER USER fgfgfgsales_admin IDENTIFIED BY “NewPass123#”;

User altered.

3. 验证用户状态
SQL> SELECT username, account_status, lock_date FROM dba_users WHERE username = ‘SALES_ADMIN’;

USERNAME ACCOUNT_STATUS LOCK_DATE
—————————— ————— ———
SALES_ADMIN OPEN

4. 测试用户登录
$ sqlplus fgfgfgsales_admin/”NewPass123#”@fgfgfgsalespdb

SQL*Plus: Release 19.0.0.0.0 – Production on Fri Mar 31 10:00:00 2026
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

SQL> SHOW USER;

USER is “SALES_ADMIN”

# 解决效果
– 用户解锁成功
– 用户登录正常
– 审计正常
– 数据安全性恢复

生产环境建议:配置PDB安全前,需要分析业务需求和系统资源,确保安全配置合理。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 PDB安全经验

Oracle数据库PDB安全经验:

  • 规划安全架构:根据业务需求规划安全架构,最小化权限
  • 配置用户管理:为PDB配置合理的用户管理
  • 监控安全事件:监控安全事件,及时发现和处理问题
  • 定期审计:定期审计PDB操作,确保数据安全
  • 设置安全告警:设置安全告警,及时发现安全问题
  • 定期review:定期review安全配置,优化安全策略
风哥提示:PDB安全是Oracle数据库多租户架构的核心功能,通过规划安全架构,配置用户管理,监控安全事件,定期审计,设置安全告警,定期review,可以显著提高数据库的安全性。from oracle:www.itpux.com

5.2 PDB安全检查清单

# PDB安全检查清单
– [ ] 检查系统资源
– [ ] 检查CDB架构
– [ ] 检查PDB安全需求
– [ ] 检查用户管理
– [ ] 检查角色管理
– [ ] 检查权限管理
– [ ] 规划安全架构
– [ ] 配置用户管理
– [ ] 配置角色管理
– [ ] 验证安全功能

# PDB安全问题处理流程
1. 检查系统资源
2. 检查CDB架构
3. 检查PDB安全需求
4. 规划安全架构
5. 配置用户管理
6. 配置角色管理
7. 验证安全功能
8. 处理安全问题
9. 优化配置
10. 监控安全事件

5.3 PDB安全工具

Oracle数据库PDB安全常用工具:

  • SQL*Plus:SQL命令行工具,用于执行SQL命令
  • Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
  • Oracle Vault:Oracle保险库,用于高级安全功能
  • SQL Developer:SQL开发工具,用于开发和调试SQL
  • Oracle Audit Vault:Oracle审计库,用于审计管理
  • Oracle Data Masking:Oracle数据脱敏,用于数据保护
持续改进:PDB安全是一个持续的过程,需要定期review和优化。建议建立PDB安全的规范和流程,不断改进数据库的安全性。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息