postgresql - 为什么 PostgreSQL 中没有 SELECT 权限时 UPDATE 权限不起作用?

标签 postgresql permissions roles postgresql-12

如果没有 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/

相关文章:

sql - 如果值不存在则插入新行并以任何一种方式获取 id

SQL : programmatically determine if table is view

redirect - 交响乐 2 : Redirect a user to a page if he has a specific role

c# - 从 Azman 获取属于角色的任务列表

php - Laravel 整数值 DB 记录列的最大值限制

linux - TYPO3 的最低权限是什么?

PHP 执行权限被拒绝

permissions - Docker卷,更改文件权限/所有者

.NET:User.IsInRole 无法在 Visual Studio 中工作

javascript - Sequelize - 两个 ID 上的双连接表