作者:Cycle
链接:https://www.lofter.com/lpost/4cf16b3f_34cd2a35d
来源:LOFTER
常用角色选项
sql
-- 授予多个角色
ROLES = (CONNECT, RESOURCE, DBA)
-- 或自定义角色
ROLES = (PDB_ADMIN_ROLE, CONNECT)
角色 作用 是否必须
CONNECT 基本连接权限(CREATE SESSION) 通常需要
DBA 数据库管理员角色(全权) 可选,强大权限
PDB_DBA PDB 专属 DBA 角色(12c+) 推荐
RESOURCE 资源创建权限(表、序列等) 可选
为什么需要 ROLES 参数?······························································
1. 简化管理
避免 PDB 创建后再手动授权
一键完成管理员用户的权限配置
2. 安全控制
sql
-- 安全建议:使用最小权限原则
ROLES = (CONNECT, PDB_DBA) -- 而非完全 DBA
-- 限制权限
ROLES = (CONNECT) -- 仅能连接,无其他权限
3. 应用容器特殊需求
对于 Application Container:
sql
-- 应用容器的 ADMIN USER 需要特定权限管理应用
CREATE PLUGGABLE DATABASE app_container
AS APPLICATION CONTAINER
ADMIN USER app_admin IDENTIFIED BY password
ROLES = (CONNECT, DBA); -- 通常需要 DBA 权限管理应用
实际执行流程·····················································································
1. PDB 创建时自动执行
sql
-- Oracle 在创建 PDB 后内部执行类似:
ALTER SESSION SET CONTAINER = appli;
CREATE USER admini IDENTIFIED BY app_123;
GRANT CONNECT TO admini;
-- 其他必要权限...
2. 验证结果
sql
-- 连接到新 PDB
ALTER SESSION SET CONTAINER = appli;
-- 查看用户权限
SELECT * FROM dba_role_privs
WHERE grantee = 'ADMINI';
-- 结果:
-- GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
-- ADMINI CONNECT NO YES
重要注意事项···················································································
1. 默认行为
如果不指定 ROLES:用户只有 CREATE SESSION 权限
可能需要后续手动授权更多角色
2. 角色作用范围
sql
-- 这些角色是 PDB 本地角色
-- 不是 CDB 级别的公共角色
-- 只在当前 PDB 内有效
3. 权限限制
sql
-- 不能授予 CDB 级别角色
ROLES = (CDB_DBA) -- 错误!CDB_DBA 是根容器角色
-- 不能授予不存在的角色
ROLES = (MY_CUSTOM_ROLE) -- 需确保角色已存在
4. 后续管理
sql
-- 创建后可修改权限
ALTER SESSION SET CONTAINER = appli;
GRANT RESOURCE TO admini;
REVOKE CONNECT FROM admini; -- 如果需要