如果没有 SELECT 权限
不允许更新,那么 UPDATE 权限
的用途是什么?
一般来说,我理解 update 内部会导致 select 查找目标行,但这种“内部 select”不会泄漏给用户,因此不清楚它是否是一个错误,或者是否有“更深层的含义”。
假设最初 my_user
仅在 my_schema
上使用,而在 my_table
上没有任何授权
情况1:
GRANT UPDATE ON TABLE my_schema.my_table TO my_user;
UPDATE my_table
SET my_col = 'X';
>> SQL Error [42501]: ERROR: permission denied for table my_table
情况2:
GRANT SELECT ON TABLE my_schema.my_table TO my_user;
GRANT UPDATE ON TABLE my_schema.my_table TO my_user;
UPDATE my_table
SET my_col = 'X';
>> SUCCESS
最佳答案
您关于“内部选择”不会泄漏给用户的假设是错误的。
returning
关键字非常强大,可用于代理 select
语句:
UPDATE my_table
SET my_col = my_col
RETURNING *;
--> 将显示与 select * from my_table
但是,仅在读取 my_col
的值时才需要 select
权限。如果您要使用常量,则它仅适用于 update
权限,并且不会让您返回该行。
REVOKE select ON my_table FROM my_user;
update my_table set my_col =1;
UPDATE 7
update my_table set my_col =1 returning *;
ERROR: permission denied for table test
关于postgresql - 为什么 PostgreSQL 中没有 SELECT 权限时 UPDATE 权限不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68023530/