我想让用户访问我数据库中的所有表,除了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;
但是我仍然可以访问该表。 我做错什么了吗?
谢谢
答案 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;