Oracle迁移后清理无效权限:求撤销不存在用户的授权脚本
Oracle数据库迁移后清理无效权限方案
简便处理思路
迁移完成后,核心是定位并撤销授予已删除Schema(不存在的用户/角色)的所有权限。可通过Oracle系统视图直接筛选这类无效权限记录,生成批量撤销语句执行,无需手动逐条处理。
查找并撤销无效权限的脚本
以下脚本基于Oracle系统视图生成撤销语句,覆盖表/对象权限、系统权限、角色授予三类场景:
1. 生成表/对象权限撤销语句
SELECT 'REVOKE ' || PRIVILEGE || ' ON ' || OWNER || '.' || TABLE_NAME || ' FROM ' || GRANTEE || ';' AS revoke_stmt FROM DBA_TAB_PRIVS WHERE GRANTEE NOT IN (SELECT USERNAME FROM DBA_USERS) AND GRANTEE NOT IN (SELECT ROLE FROM DBA_ROLES);
2. 生成系统权限撤销语句
SELECT 'REVOKE ' || PRIVILEGE || ' FROM ' || GRANTEE || ';' AS revoke_stmt FROM DBA_SYS_PRIVS WHERE GRANTEE NOT IN (SELECT USERNAME FROM DBA_USERS) AND GRANTEE NOT IN (SELECT ROLE FROM DBA_ROLES);
3. 生成角色授予撤销语句
SELECT 'REVOKE ' || GRANTED_ROLE || ' FROM ' || GRANTEE || ';' AS revoke_stmt FROM DBA_ROLE_PRIVS WHERE GRANTEE NOT IN (SELECT USERNAME FROM DBA_USERS) AND GRANTEE NOT IN (SELECT ROLE FROM DBA_ROLES);
使用说明
- 分别执行上述查询,将结果集中的
revoke_stmt列内容导出为独立SQL脚本。 - 仔细核对脚本中的GRANTEE是否为迁移时已删除的Schema,避免误操作。
- 先在测试环境验证脚本执行效果,确认无误后再在生产环境运行。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

