我想要实现的目标:
CREATE VIEW restricted_view AS
SELECT "id", "description" FROM users;
GRANT SELECT ON restricted_view to restricted_group;
它完成了这项工作,但由于 Postgres 的限制“不能更改表,因为其他对象依赖于它”,它阻止了表“用户”上的任何 DDL。
Postgres 中的行为对我来说非常奇怪,因为在 Oracle 中它只会使视图无效,但不会阻止 DDL。
使用 CASCADE 或重新创建 VIEW 作为此任务的一部分是不可行的。
GRANT SELECT ("ID", "desc") ON users TO restricted_group;
它禁止用户进行“SELECT * users”,并要求显式列出所有允许的列,这对用户不友好。因为用户应该首先检查任何列的访问情况,而不是快速获取数据。请告诉我一个可以满足所有初始要求的解决方案?
您坚持以下要求:
显而易见的解决方案是在需要时重新创建视图,但您没有说明为什么这不适合您。