插件窝 干货文章 Oracle表只读权限的授权与撤销操作步骤

Oracle表只读权限的授权与撤销操作步骤

权限 只读 角色 SELECT 977    来源:    2025-04-09

Oracle表只读权限的授权与撤销操作指南

授权只读权限

1. 授予单个表的只读权限

GRANT SELECT ON 表名 TO 用户名;

2. 授予多个表的只读权限

GRANT SELECT ON 表名1, 表名2, 表名3 TO 用户名;

3. 授予模式(schema)下所有表的只读权限

-- 使用动态SQL批量授权
BEGIN
  FOR t IN (SELECT table_name FROM all_tables WHERE owner='模式名') LOOP
    EXECUTE IMMEDIATE 'GRANT SELECT ON '||t.table_name||' TO 用户名';
  END LOOP;
END;
/

4. 授予角色只读权限(推荐方式)

-- 创建角色
CREATE ROLE 角色名;

-- 授予角色SELECT权限
GRANT SELECT ON 表名 TO 角色名;

-- 将角色授予用户
GRANT 角色名 TO 用户名;

撤销只读权限

1. 撤销单个表的只读权限

REVOKE SELECT ON 表名 FROM 用户名;

2. 撤销多个表的只读权限

REVOKE SELECT ON 表名1, 表名2, 表名3 FROM 用户名;

3. 撤销模式下所有表的只读权限

BEGIN
  FOR t IN (SELECT table_name FROM all_tables WHERE owner='模式名') LOOP
    EXECUTE IMMEDIATE 'REVOKE SELECT ON '||t.table_name||' FROM 用户名';
  END LOOP;
END;
/

4. 撤销通过角色授予的只读权限

-- 从用户撤销角色
REVOKE 角色名 FROM 用户名;

-- 或者从角色撤销权限
REVOKE SELECT ON 表名 FROM 角色名;

注意事项

  1. 执行授权操作的用户必须拥有足够的权限(通常需要DBA或表所有者权限)
  2. 批量操作时建议先在测试环境验证脚本
  3. 使用角色管理权限更易于维护
  4. 可以通过数据字典视图查看现有权限:

    SELECT * FROM dba_tab_privs WHERE grantee='用户名';
    SELECT * FROM role_tab_privs WHERE role='角色名';
    
  5. 对于大型系统,考虑使用Oracle的细粒度访问控制(FGAC)或虚拟私有数据库(VPD)功能实现更精细的权限控制