Oracle 12C:授权用户仅在指定Schema创建表的流程及角色应用
Oracle 12c 权限管理问题解答
如何为Tom、Dick和Harry授权仅能在MYAPP1 Schema内创建表?
要限制用户仅在指定Schema内创建表,需执行以下操作:
- 先收回用户的
CREATE TABLE系统权限(防止他们在自身Schema建表):REVOKE CREATE TABLE FROM TOM, DICK, HARRY; - 由MYAPP1的Schema所有者执行授权,允许用户仅在该Schema内创建表:
GRANT CREATE TABLE ON SCHEMA MYAPP1 TO TOM; GRANT CREATE TABLE ON SCHEMA MYAPP1 TO DICK; GRANT CREATE TABLE ON SCHEMA MYAPP1 TO HARRY;
完成后,用户只能在MYAPP1下创建表,无法在其他Schema(包括自身Schema)执行建表操作。
执行grant create any table to user tom会赋予其在任意Schema创建表的权限吗?
是的。CREATE ANY TABLE是系统级权限,授予后Tom可以在数据库的任意Schema(包括SYS、SYSTEM等系统Schema)中创建表,权限范围远超出仅在MYAPP1内建表的需求,这种场景下不建议使用该授权。
Tom、Dick和Harry如何获取自己创建表的增删改查权限?
由于在MYAPP1下创建的表所有权属于MYAPP1,创建者默认不会自动获得操作权限,可通过两种方式配置:
- 针对已创建的表,由MYAPP1所有者直接授权:
GRANT SELECT, INSERT, UPDATE, DELETE ON MYAPP1.目标表名 TO TOM; - 针对未来新建的表,设置默认权限,让创建者自动获得操作权限:
ALTER DEFAULT PRIVILEGES IN SCHEMA MYAPP1 GRANT SELECT, INSERT, UPDATE, DELETE TO TOM, DICK, HARRY;
配置后,后续用户在MYAPP1创建的表会自动赋予他们增删改查权限。
能否通过角色实现动态添加或移除用户,避免团队变动时重复授权?
完全可以,通过角色统一管理权限是高效的解决方案:
- 创建专用角色,例如
MYAPP1_DEVELOPER:CREATE ROLE MYAPP1_DEVELOPER; - 将所需权限批量授予该角色:
-- 允许角色在MYAPP1创建表 GRANT CREATE TABLE ON SCHEMA MYAPP1 TO MYAPP1_DEVELOPER; -- 设置默认权限,让角色拥有新建表的增删改查权限 ALTER DEFAULT PRIVILEGES IN SCHEMA MYAPP1 GRANT SELECT, INSERT, UPDATE, DELETE TO MYAPP1_DEVELOPER; - 将角色授予需要的用户:
GRANT MYAPP1_DEVELOPER TO TOM, DICK, HARRY;
当团队人员变动时,只需执行GRANT MYAPP1_DEVELOPER TO 新用户;或REVOKE MYAPP1_DEVELOPER FROM 离职用户;即可,无需重复配置单个权限,大幅简化管理流程。
内容的提问来源于stack exchange,提问作者Hussain Akbar
相关产品推荐
相关产品推荐

