GRANT SELECT ON 表名 TO 用户名;
GRANT SELECT ON 表名1, 表名2, 表名3 TO 用户名;
-- 使用动态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;
/
-- 创建角色
CREATE ROLE 角色名;
-- 授予角色SELECT权限
GRANT SELECT ON 表名 TO 角色名;
-- 将角色授予用户
GRANT 角色名 TO 用户名;
REVOKE SELECT ON 表名 FROM 用户名;
REVOKE SELECT ON 表名1, 表名2, 表名3 FROM 用户名;
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;
/
-- 从用户撤销角色
REVOKE 角色名 FROM 用户名;
-- 或者从角色撤销权限
REVOKE SELECT ON 表名 FROM 角色名;
可以通过数据字典视图查看现有权限:
SELECT * FROM dba_tab_privs WHERE grantee='用户名';
SELECT * FROM role_tab_privs WHERE role='角色名';
对于大型系统,考虑使用Oracle的细粒度访问控制(FGAC)或虚拟私有数据库(VPD)功能实现更精细的权限控制