Oracle,希望将两万张表里的100张不被新用户访问

数据库权限隔离,目前需要新建用户,要求新用户能访问原用户的大部分表,个别表有敏感信息除外,可以挨个表权限删除吗,排除手写19900条授权sql

不清楚你的架构是怎么样的,一般要排查的话,会用到数据库的数据字典,然后通过数据字典动态的生成脚本。
例如排查某张表的权限
select 'REVOKE SELECT ON '||t.TABLE_NAME||' FROM XXXX;' from user_tables t WHERE T.TABLE_NAME IN ('')

授权SQL可以写个字符串拼接的sql得到,或者你也可以在EXCEL里用公式把授权命令拼出来。

select 'grant select on '||user||'.'||table_name|| ' to QUERY_USER;' from user_tables;

因为你是新用户访问原用户里的部分表,不管是多还是少,只要需求是"部分",那么你必然不能做ALL的授权,而是必须要生成这19900个指定表的授权命令。
没有"拒绝"或者"排除"这样的权限。
另外,如果只有个别表,可以考虑在表上建立触发器,触发器里判断是指定的用户来查询就直接报错,但不建议使用此种方式,因为会降低其他用户查询的效率

REVOKE关键字是可以实现这个需求的 先把整体的表授权给需要查询的用户,再把需要撤回的表的,按照单表授权的思路去收回授权

建视图,给用户授权视图的权限