从 PostgreSQL 9.0 开始,每个大对象都有自己的访问权限,这些权限被授予:
GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
ON LARGE OBJECT loid [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Run Code Online (Sandbox Code Playgroud)
SELECT 权限允许以只读模式打开对象,对于 UPDATE,文档说:
For large objects, this privilege allows writing or truncating the object.
Run Code Online (Sandbox Code Playgroud)
但是如果一个大对象属于user1
,我找不到如何授予user2
删除(lo_unlink
)这个对象的权限。如果 user1 说GRANT UPDATE on LARGE OBJECT xyz TO user2;
并且 user2 运行SELECT lo_unlink(xyz);
,则会被拒绝:
ERROR: must be owner of large object xyz
Run Code Online (Sandbox Code Playgroud)
真的只有所有者才能删除大对象吗,或者我遗漏了什么?
我的用例是一个 db,它存储在不同 db 用户之间共享的邮箱。所有带有邮件内容的表和带有邮件附件的大对象都归一个“主”用户所有,其他用户可能会或可能不会删除消息,这取决于他们的数据库角色。
删除消息意味着删除与其相关的所有内容,包括存储在大对象中的附件。因此,非所有者应该能够删除大对象是有道理的,就像如果他已被授予对这些表的 DELETE 权限,他可以从其他表中删除一样。
归档时间: |
|
查看次数: |
2176 次 |
最近记录: |