Oracle,对除1

时间:2018-11-09 13:43:44

标签: sql oracle roles

我想让用户访问我数据库中的所有表,除了1个表(例如“ MY_SECRET_TABLE”)。 我的解决方案当前无法正常工作...:

Grant select any table to public;
Grant select any table to MY_USER;
Revoke all on MY_SECRET_TABLE from MY_USER;

但是我仍然可以访问该表。 我做错什么了吗?

谢谢

2 个答案:

答案 0 :(得分:1)

在任何表上进行GRANT SELECT是一项非常强大的特权,因此您可能需要重新考虑您的策略。

无论如何,我看到的唯一解决方案是使用行级安全性,以便除MY_USER之外的任何人都可以选择表,但不会返回任何行。

听起来如何?

答案 1 :(得分:1)

一种方法是通过SQL获取可执行文件授权

SELECT   'GRANT SELECT ON ' || object_name || ' TO USERNAME;'
FROM     user_objects
WHERE    object_type = 'TABLE' AND object_name != 'EXCEPT_THIS_TABLE'
ORDER BY object_name;