为什么以非所有者身份登录时可以删除表?

Vla*_*lad 0 postgresql security permissions pgadmin drop-table

我读到只有所有者可以删除表,其他用户不能这样做。

我用所有者创建了一个表,postgres然后将它作为另一个用户删除。我应该撤销哪些特权来禁止它?

用户在 db 属性中拥有默认授予的所有权限,但我没有看到任何“创建表”或“删除表”权限。

Erw*_*ter 5

超级用户总是免于低权限检查。文档:

超级用户状态

数据库超级用户绕过所有权限检查,除了登录权限。这是一个危险的权限,不应粗心使用;...

要查看您当前的用户是否是超级用户

SHOW IS_SUPERUSER;
Run Code Online (Sandbox Code Playgroud)

列出所有超级用户角色:

SELECT rolname FROM pg_roles WHERE rolsuper;
Run Code Online (Sandbox Code Playgroud)

模式所有者可以做到这一点。的文档DROP TABLE

只有表所有者、模式所有者和超级用户才能删除表。

列出架构所有者:

SELECT n.nspname AS schema_name, pg_get_userbyid(n.nspowner) AS owner
FROM   pg_namespace n
WHERE  n.nspname NOT LIKE 'pg_%'
AND    n.nspname <> 'information_schema'
ORDER  BY 1;
Run Code Online (Sandbox Code Playgroud)

\dn在 psql 中大致相同。

你是谁?

SELECT current_user, session_user;
Run Code Online (Sandbox Code Playgroud)