本文档风哥主要介绍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数据库版本必须支持公共用户
- 配置:需要配置适当的参数和选项
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公共用户配置,优化管理策略
Part03-生产环境项目实施方案
3.1 公共用户实施
3.1.1 创建公共用户
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 username, common, account_status FROM cdb_users WHERE common = ‘YES’ ORDER BY username;
USERNAME COMMON ACCOUNT_STATUS
—————————— ——– —————
C##ADMIN YES OPEN
C##MONITOR YES OPEN
SYS YES OPEN
SYSTEM YES OPEN
# 创建公共用户
SQL> CREATE USER c##app_admin IDENTIFIED BY “App123#”
CONTAINER = ALL;
User created.
SQL> CREATE USER c##app_user IDENTIFIED BY “App123#”
CONTAINER = ALL;
User created.
# 查看公共用户
SQL> SELECT username, common, account_status FROM cdb_users WHERE common = ‘YES’ ORDER BY username;
USERNAME COMMON ACCOUNT_STATUS
—————————— ——– —————
C##ADMIN YES OPEN
C##APP_ADMIN YES OPEN
C##FGFGFGAPP_USER YES OPEN
C##MONITOR YES OPEN
SYS YES OPEN
SYSTEM YES OPEN
# 验证公共用户创建成功
3.1.2 创建公共角色
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##APP_READ_ROLE YES
C##APP_WRITE_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> SELECT role, common FROM cdb_roles WHERE common = ‘YES’ ORDER BY role;
ROLE COMMON
—————————— ——–
C##APP_READ_ROLE YES
C##APP_WRITE_ROLE YES
DBA YES
EXP_FULL_DATABASE YES
IMP_FULL_DATABASE YES
# 验证公共角色创建成功
3.2 公共用户配置
3.2.1 配置公共用户权限
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 授予公共角色权限
SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW 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 c##app_read_role TO c##app_user CONTAINER = ALL;
Grant succeeded.
SQL> GRANT c##app_write_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_WRITE_ROLE YES
C##FGFGFGAPP_USER C##APP_READ_ROLE YES
# 验证公共用户权限配置成功
3.2.2 配置公共用户管理
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 配置公共用户密码
SQL> ALTER USER c##app_admin IDENTIFIED BY “NewApp123#”;
User altered.
SQL> ALTER USER c##app_user IDENTIFIED BY “NewApp123#”;
User altered.
# 配置公共用户密码策略
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90;
Profile altered.
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME 365;
Profile altered.
SQL> ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 5;
Profile altered.
# 查看公共用户
SQL> SELECT username, account_status, profile FROM cdb_users WHERE common = ‘YES’ AND username IN (‘C##APP_ADMIN’, ‘C##FGFGFGAPP_USER’) ORDER BY username;
USERNAME ACCOUNT_STATUS PROFILE
—————————— ————— ———
C##APP_ADMIN OPEN DEFAULT
C##FGFGFGAPP_USER OPEN DEFAULT
# 验证公共用户管理配置成功
3.3 公共用户验证
3.3.1 验证公共用户
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 查看公共用户
SQL> SELECT username, common, account_status FROM cdb_users WHERE common = ‘YES’ ORDER BY username;
USERNAME COMMON ACCOUNT_STATUS
—————————— ——– —————
C##ADMIN YES OPEN
C##APP_ADMIN YES OPEN
C##FGFGFGAPP_USER YES OPEN
C##MONITOR YES OPEN
SYS YES OPEN
SYSTEM YES OPEN
# 测试公共用户登录
$ sqlplus c##app_admin/”NewApp123#”@orclcdb
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##APP_ADMIN”
SQL> SELECT con_id, name FROM v$containers;
CON_ID NAME
—— ———
1 CDB$ROOT
2 PDB$SEED
3 SALESPDB
4 HRPDB
5 APP_ROOT
6 APP_PDB1
# 验证公共用户成功
3.3.2 验证公共用户在PDB中的使用
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看公共用户
SQL> SELECT username, account_status FROM dba_users WHERE username LIKE ‘C##%’ ORDER BY username;
USERNAME ACCOUNT_STATUS
—————————— —————
C##APP_ADMIN OPEN
C##FGFGFGAPP_USER OPEN
# 测试公共用户在PDB中的使用
$ sqlplus c##app_admin/”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##APP_ADMIN”
SQL> SELECT con_id, name FROM v$pdbs;
CON_ID NAME
—— ———
3 SALESPDB
SQL> CREATE TABLE test_common_user (
id NUMBER,
name VARCHAR2(100)
);
Table created.
SQL> INSERT INTO test_common_user (id, name) VALUES (1, ‘Common User Test’);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT * FROM test_common_user;
ID NAME
———- ——————-
1 Common User Test
# 验证公共用户在PDB中的使用成功
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. 创建公共用户
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
SQL> CREATE USER c##app_admin IDENTIFIED BY “App123#” CONTAINER = ALL;
User created.
3. 创建公共角色
SQL> CREATE ROLE c##app_read_role CONTAINER = ALL;
Role created.
4. 配置权限
SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO c##app_read_role CONTAINER = ALL;
Grant succeeded.
SQL> GRANT c##app_read_role TO c##app_user CONTAINER = ALL;
Grant succeeded.
5. 验证公共用户
SQL> SELECT username, common, account_status FROM cdb_users WHERE common = ‘YES’ AND username = ‘C##APP_ADMIN’;
USERNAME COMMON ACCOUNT_STATUS
—————————— ——– —————
C##APP_ADMIN YES OPEN
# 实施效果
– 成功创建公共用户
– 公共用户正常
– 公共角色正常
– 公共权限正常
– 管理效率提高
4.2 公共用户优化案例
在某金融机构的生产环境中,需要优化公共用户,提高安全性。
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:公共用户需要优化
# 优化方案
1. 查看公共用户配置
SQL> SELECT username, profile, account_status FROM cdb_users WHERE common = ‘YES’ AND username = ‘C##APP_ADMIN’;
USERNAME PROFILE ACCOUNT_STATUS
—————————— ——— —————
C##APP_ADMIN DEFAULT OPEN
2. 优化公共用户配置
SQL> CREATE PROFILE app_admin_profile LIMIT
PASSWORD_LIFE_TIME 90
PASSWORD_REUSE_TIME 365
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 1;
Profile created.
SQL> ALTER USER c##app_admin PROFILE app_admin_profile;
User altered.
3. 配置密码验证
SQL> ALTER SYSTEM SET PASSWORD_VERIFY_FUNCTION = ‘ORA12C_VERIFY_FUNCTION’ SCOPE = BOTH;
System altered.
4. 验证优化效果
SQL> SELECT username, profile, account_status FROM cdb_users WHERE common = ‘YES’ AND username = ‘C##APP_ADMIN’;
USERNAME PROFILE ACCOUNT_STATUS
—————————— —————— —————
C##APP_ADMIN APP_ADMIN_PROFILE OPEN
# 优化效果
– 公共用户配置优化
– 密码策略优化
– 安全性提高
– 管理效率提高
4.3 公共用户问题处理
在某电商网站的生产环境中,公共用户出现问题,需要处理。
– 公共用户无法登录
– 公共用户权限不足
– 公共用户被锁定
# 分析步骤
1. 查看公共用户状态
SQL> SELECT username, account_status, lock_date FROM cdb_users WHERE common = ‘YES’ AND username = ‘C##APP_ADMIN’;
USERNAME ACCOUNT_STATUS LOCK_DATE
—————————— ————— ———
C##APP_ADMIN LOCKED 31-MAR-26
2. 查看登录失败记录
SQL> SELECT username, action_name, returncode, timestamp FROM cdb_audit_trail WHERE username = ‘C##APP_ADMIN’ AND returncode != 0 ORDER BY timestamp DESC FETCH FIRST 10 ROWS ONLY;
USERNAME ACTION_NAME RETURNCODE TIMESTAMP
————– ————– ———– ——————-
C##APP_ADMIN LOGON 1017 31-MAR-26 10:00:00
C##APP_ADMIN LOGON 1017 31-MAR-26 09:55:00
C##APP_ADMIN LOGON 1017 31-MAR-26 09:50:00
C##APP_ADMIN LOGON 1017 31-MAR-26 09:45:00
C##APP_ADMIN LOGON 1017 31-MAR-26 09:40:00
# 问题原因
– 公共用户密码错误次数过多
– 公共用户被锁定
– 登录失败
# 解决方案
1. 解锁公共用户
SQL> ALTER USER c##app_admin ACCOUNT UNLOCK;
User altered.
2. 重置密码
SQL> ALTER USER c##app_admin IDENTIFIED BY “NewApp123#”;
User altered.
3. 验证公共用户状态
SQL> SELECT username, account_status, lock_date FROM cdb_users WHERE common = ‘YES’ AND username = ‘C##APP_ADMIN’;
USERNAME ACCOUNT_STATUS LOCK_DATE
—————————— ————— ———
C##APP_ADMIN OPEN
4. 测试公共用户登录
$ sqlplus c##app_admin/”NewApp123#”@orclcdb
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##APP_ADMIN”
# 解决效果
– 公共用户解锁成功
– 公共用户登录正常
– 公共用户权限正常
– 管理效率恢复
Part05-风哥经验总结与分享
5.1 公共用户经验
Oracle数据库公共用户经验:
- 规划公共用户架构:根据业务需求规划公共用户架构,最小化权限
- 配置公共用户:为CDB配置合理的公共用户
- 监控公共用户:监控公共用户使用情况,及时发现和处理问题
- 定期审计:定期审计公共用户操作,确保数据安全
- 设置安全告警:设置安全告警,及时发现安全问题
- 定期review:定期review公共用户配置,优化管理策略
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数据脱敏,用于数据保护
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
