1. 首页 > Oracle教程 > 正文

Oracle教程FG377-公共角色

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

Part01-基础概念与理论知识

1.1 公共角色的概念

Oracle数据库公共角色是指在多租户容器数据库(CDB)中可以在所有PDB中使用的角色,包括公共角色创建、公共角色权限、公共角色管理等组件。公共角色可以实现跨PDB的角色管理,提高管理效率。公共角色包括公共角色创建、公共角色权限、公共角色管理等组件。更多视频教程www.fgedu.net.cn

公共角色的特点:

  • 支持跨PDB的角色管理
  • 支持公共角色权限
  • 支持公共角色继承
  • 支持角色隔离
  • 提高管理效率

1.2 公共角色的方法

Oracle数据库公共角色的方法:

  • 公共角色创建:创建公共角色
  • 公共角色权限授予:授予公共角色权限
  • 公共角色管理:管理公共角色
  • 公共角色验证:验证公共角色
  • 公共角色监控:监控公共角色使用情况

1.3 公共角色的要求

Oracle数据库公共角色的要求:

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

Part02-生产环境规划与建议

2.1 公共角色规划

Oracle数据库公共角色规划要点:

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

# 适用场景
– 多租户数据库
– 需要跨PDB角色管理的系统
– 需要公共角色权限的系统
– 需要提高管理效率的系统
– 需要角色隔离的系统

# 不适用场景
– 单租户数据库
– 公共角色需求简单的系统
– 低管理需求系统

2.2 公共角色设计

Oracle数据库公共角色设计建议:

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

# 公共角色设计策略
– 合理规划公共角色架构
– 配置适当的公共角色
– 配置适当的公共角色权限
– 配置适当的公共角色管理
– 配置适当的公共角色监控

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

2.3 公共角色最佳实践

Oracle数据库公共角色最佳实践:

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

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

3.1 公共角色实施

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

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

Session altered.

# 查看公共角色
SQL> SELECT role, common FROM cdb_roles WHERE common = ‘YES’ ORDER BY role;

ROLE COMMON
—————————— ——–
C##ADMIN_ROLE YES
C##MONITOR_ROLE YES
DBA YES
EXP_FULL_DATABASE YES
IMP_FULL_DATABASE YES

# 创建公共角色
SQL> CREATE ROLE c##app_read_role CONTAINER = ALL;

Role created.

SQL> CREATE ROLE c##app_write_role CONTAINER = ALL;

Role created.

SQL> CREATE ROLE c##app_admin_role CONTAINER = ALL;

Role created.

# 查看公共角色
SQL> SELECT role, common FROM cdb_roles WHERE common = ‘YES’ AND role LIKE ‘C##APP%’ ORDER BY role;

ROLE COMMON
—————————— ——–
C##APP_ADMIN_ROLE YES
C##APP_READ_ROLE YES
C##APP_WRITE_ROLE YES

# 验证公共角色创建成功

3.1.2 配置公共角色权限

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

Session altered.

# 授予公共角色权限
SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, SELECT ANY TABLE TO c##app_read_role CONTAINER = ALL;

Grant succeeded.

SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, INSERT, UPDATE, DELETE TO c##app_write_role CONTAINER = ALL;

Grant succeeded.

SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, INSERT, UPDATE, DELETE, DROP, ALTER TO c##app_admin_role CONTAINER = ALL;

Grant succeeded.

# 查看公共角色权限
SQL> SELECT grantee, privilege, common FROM cdb_sys_privs WHERE grantee IN (‘C##APP_READ_ROLE’, ‘C##APP_WRITE_ROLE’, ‘C##APP_ADMIN_ROLE’) AND common = ‘YES’ ORDER BY grantee, privilege;

GRANTEE PRIVILEGE COMMON
—————- —————- ——–
C##APP_ADMIN_ROLE ALTER YES
C##APP_ADMIN_ROLE CREATE SESSION YES
C##APP_ADMIN_ROLE CREATE TABLE YES
C##APP_ADMIN_ROLE CREATE VIEW YES
C##APP_ADMIN_ROLE DELETE YES
C##APP_ADMIN_ROLE DROP YES
C##APP_ADMIN_ROLE INSERT YES
C##APP_ADMIN_ROLE UPDATE YES
C##APP_READ_ROLE CREATE SESSION YES
C##APP_READ_ROLE CREATE TABLE YES
C##APP_READ_ROLE CREATE VIEW YES
C##APP_READ_ROLE SELECT ANY TABLE YES
C##APP_WRITE_ROLE CREATE SESSION YES
C##APP_WRITE_ROLE CREATE TABLE YES
C##APP_WRITE_ROLE CREATE VIEW YES
C##APP_WRITE_ROLE DELETE YES
C##APP_WRITE_ROLE INSERT YES
C##APP_WRITE_ROLE UPDATE YES

# 验证公共角色权限配置成功

3.2 公共角色配置

3.2.1 授予公共用户角色

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

Session altered.

# 查看公共用户
SQL> SELECT username, common, account_status FROM cdb_users WHERE common = ‘YES’ AND username LIKE ‘C##APP%’ ORDER BY username;

USERNAME COMMON ACCOUNT_STATUS
—————————— ——– —————
C##APP_ADMIN YES OPEN
C##FGFGFGAPP_USER YES OPEN

# 授予公共用户角色
SQL> GRANT c##app_read_role TO c##app_user CONTAINER = ALL;

Grant succeeded.

SQL> GRANT c##app_admin_role TO c##app_admin CONTAINER = ALL;

Grant succeeded.

# 查看公共用户角色
SQL> SELECT grantee, granted_role, common FROM cdb_role_privs WHERE grantee IN (‘C##APP_ADMIN’, ‘C##FGFGFGAPP_USER’) AND common = ‘YES’ ORDER BY grantee, granted_role;

GRANTEE GRANTED_ROLE COMMON
———- ——————– ——–
C##APP_ADMIN C##APP_ADMIN_ROLE YES
C##FGFGFGAPP_USER C##APP_READ_ROLE YES

# 验证公共用户角色配置成功

3.2.2 配置公共角色管理

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

Session altered.

# 配置公共角色密码
SQL> ALTER ROLE c##app_admin_role IDENTIFIED BY “Admin123#”;

Role altered.

SQL> ALTER ROLE c##app_read_role IDENTIFIED BY “Read123#”;

Role altered.

SQL> ALTER ROLE c##app_write_role IDENTIFIED BY “Write123#”;

Role altered.

# 查看公共角色
SQL> SELECT role, password_required FROM dba_roles WHERE role IN (‘C##APP_ADMIN_ROLE’, ‘C##APP_READ_ROLE’, ‘C##APP_WRITE_ROLE’) ORDER BY role;

ROLE PASSWORD_REQUIRED
—————————— ——————
C##APP_ADMIN_ROLE YES
C##APP_READ_ROLE YES
C##APP_WRITE_ROLE YES

# 验证公共角色管理配置成功

3.3 公共角色验证

3.3.1 验证公共角色

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

Session altered.

# 查看公共角色
SQL> SELECT role, common FROM cdb_roles WHERE common = ‘YES’ AND role LIKE ‘C##APP%’ ORDER BY role;

ROLE COMMON
—————————— ——–
C##APP_ADMIN_ROLE YES
C##APP_READ_ROLE YES
C##APP_WRITE_ROLE YES

# 查看公共角色权限
SQL> SELECT grantee, privilege, common FROM cdb_sys_privs WHERE grantee IN (‘C##APP_READ_ROLE’, ‘C##APP_WRITE_ROLE’, ‘C##APP_ADMIN_ROLE’) AND common = ‘YES’ ORDER BY grantee, privilege;

GRANTEE PRIVILEGE COMMON
—————- —————- ——–
C##APP_ADMIN_ROLE ALTER YES
C##APP_ADMIN_ROLE CREATE SESSION YES
C##APP_ADMIN_ROLE CREATE TABLE YES
C##APP_ADMIN_ROLE CREATE VIEW YES
C##APP_ADMIN_ROLE DELETE YES
C##APP_ADMIN_ROLE DROP YES
C##APP_ADMIN_ROLE INSERT YES
C##APP_ADMIN_ROLE UPDATE YES
C##APP_READ_ROLE CREATE SESSION YES
C##APP_READ_ROLE CREATE TABLE YES
C##APP_READ_ROLE CREATE VIEW YES
C##APP_READ_ROLE SELECT ANY TABLE YES
C##APP_WRITE_ROLE CREATE SESSION YES
C##APP_WRITE_ROLE CREATE TABLE YES
C##APP_WRITE_ROLE CREATE VIEW YES
C##APP_WRITE_ROLE DELETE YES
C##APP_WRITE_ROLE INSERT YES
C##APP_WRITE_ROLE UPDATE YES

# 验证公共角色成功

3.3.2 验证公共角色在PDB中的使用

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

Session altered.

# 查看公共角色
SQL> SELECT role FROM dba_roles WHERE role LIKE ‘C##APP%’ ORDER BY role;

ROLE
——————————
C##APP_ADMIN_ROLE
C##APP_READ_ROLE
C##APP_WRITE_ROLE

# 测试公共角色在PDB中的使用
$ sqlplus c##app_user/”NewApp123#”@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 “C##FGFGFGAPP_USER”

SQL> SELECT * FROM session_roles;

ROLE
——————————
C##APP_READ_ROLE

SQL> CREATE TABLE test_common_role (
id NUMBER,
name VARCHAR2(100)
);

Table created.

SQL> INSERT INTO test_common_role (id, name) VALUES (1, ‘Common Role Test’);

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT * FROM test_common_role;

ID NAME
———- ——————-
1 Common Role Test

# 验证公共角色在PDB中的使用成功

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

Part04-生产案例与实战讲解

4.1 公共角色案例

在某企业的生产环境中,需要创建公共角色。

# 案例背景
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:创建公共角色

# 实施方案
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. 切换到CDB
SQL> ALTER SESSION SET CONTAINER = cdb$root;

Session altered.

3. 创建公共角色
SQL> CREATE ROLE c##app_read_role CONTAINER = ALL;

Role created.

4. 配置权限
SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, SELECT ANY TABLE TO c##app_read_role CONTAINER = ALL;

Grant succeeded.

5. 授予公共用户角色
SQL> GRANT c##app_read_role TO c##app_user CONTAINER = ALL;

Grant succeeded.

6. 验证公共角色
SQL> SELECT role, common FROM cdb_roles WHERE role = ‘C##APP_READ_ROLE’;

ROLE COMMON
—————————— ——–
C##APP_READ_ROLE YES

# 实施效果
– 成功创建公共角色
– 公共角色正常
– 公共角色权限正常
– 公共角色管理正常
– 管理效率提高

4.2 公共角色优化案例

在某金融机构的生产环境中,需要优化公共角色,提高安全性。

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

# 优化方案
1. 查看公共角色配置
SQL> SELECT role, password_required FROM dba_roles WHERE role = ‘C##APP_READ_ROLE’;

ROLE PASSWORD_REQUIRED
—————————— ——————
C##APP_READ_ROLE NO

2. 优化公共角色配置
SQL> ALTER ROLE c##app_read_role IDENTIFIED BY “Read123#”;

Role altered.

3. 优化公共角色权限
SQL> REVOKE SELECT ANY TABLE FROM c##app_read_role CONTAINER = ALL;

Revoke succeeded.

SQL> GRANT SELECT ON fgfgfgsales.orders TO c##app_read_role CONTAINER = ALL;

Grant succeeded.

4. 验证优化效果
SQL> SELECT role, password_required FROM dba_roles WHERE role = ‘C##APP_READ_ROLE’;

ROLE PASSWORD_REQUIRED
—————————— ——————
C##APP_READ_ROLE YES

# 优化效果
– 公共角色配置优化
– 公共角色权限优化
– 安全性提高
– 管理效率提高

4.3 公共角色问题处理

在某电商网站的生产环境中,公共角色出现问题,需要处理。

# 问题现象
– 公共角色无法使用
– 公共角色权限不足
– 公共角色被锁定

# 分析步骤
1. 查看公共角色状态
SQL> SELECT role, password_required FROM dba_roles WHERE role = ‘C##APP_READ_ROLE’;

ROLE PASSWORD_REQUIRED
—————————— ——————
C##APP_READ_ROLE YES

2. 查看公共角色权限
SQL> SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = ‘C##APP_READ_ROLE’;

GRANTEE PRIVILEGE
—————- —————-
C##APP_READ_ROLE CREATE SESSION
C##APP_READ_ROLE CREATE TABLE
C##APP_READ_ROLE CREATE VIEW

3. 查看公共用户角色
SQL> SELECT grantee, granted_role FROM dba_role_privs WHERE grantee = ‘C##FGFGFGAPP_USER’;

GRANTEE GRANTED_ROLE
———- ——————–
C##FGFGFGAPP_USER C##APP_READ_ROLE

# 问题原因
– 公共角色权限不足
– 公共角色配置问题
– 公共角色使用问题

# 解决方案
1. 授予公共角色权限
SQL> GRANT SELECT ON fgfgfgsales.orders TO c##app_read_role CONTAINER = ALL;

Grant succeeded.

2. 验证公共角色权限
SQL> SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = ‘C##APP_READ_ROLE’;

GRANTEE PRIVILEGE
—————- —————-
C##APP_READ_ROLE CREATE SESSION
C##APP_READ_ROLE CREATE TABLE
C##APP_READ_ROLE CREATE VIEW

3. 测试公共角色使用
$ sqlplus c##app_user/”NewApp123#”@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 “C##FGFGFGAPP_USER”

SQL> SELECT * FROM session_roles;

ROLE
——————————
C##APP_READ_ROLE

SQL> SELECT * FROM fgfgfgsales.orders WHERE rownum <= 5;

ORDER_ID ORDER_DATE CUSTOMER_ID TOTAL_AMOUNT
——— ———- ———— ————
1 31-MAR-26 1 1000.00
2 31-MAR-26 2 2000.00
3 31-MAR-26 3 3000.00
4 31-MAR-26 4 4000.00
5 31-MAR-26 5 5000.00

# 解决效果
– 公共角色权限恢复
– 公共角色使用正常
– 公共角色管理正常
– 管理效率恢复

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

Part05-风哥经验总结与分享

5.1 公共角色经验

Oracle数据库公共角色经验:

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

5.2 公共角色检查清单

# 公共角色检查清单
– [ ] 检查系统资源
– [ ] 检查CDB架构
– [ ] 检查公共角色需求
– [ ] 检查公共角色配置
– [ ] 检查公共角色权限
– [ ] 检查公共角色管理
– [ ] 规划公共角色架构
– [ ] 创建公共角色
– [ ] 配置公共角色权限
– [ ] 验证公共角色功能

# 公共角色问题处理流程
1. 检查系统资源
2. 检查CDB架构
3. 检查公共角色需求
4. 规划公共角色架构
5. 创建公共角色
6. 配置公共角色权限
7. 验证公共角色功能
8. 处理公共角色问题
9. 优化配置
10. 监控公共角色使用情况

5.3 公共角色工具

Oracle数据库公共角色常用工具:

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

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

联系我们

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

微信号:itpux-com

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