Почему я могу удалить таблицу, если я вошел в систему как не владелец?

dba.stackexchange https://dba.stackexchange.com/questions/128572

Вопрос

Я читал, что только владелец может удалить таблицу, и ни один другой пользователь не может сделать это.

Я создал таблицу с владельцем postgres, а затем удалил ее как другого пользователя.Какие привилегии я должен отозвать, чтобы запретить это?

У пользователя есть все привилегии, предоставленные по умолчанию в свойствах базы данных, но я не вижу никаких привилегий «создать таблицу» или «удалить таблицу».

Это было полезно?

Решение

Суперпользователи всегда освобождаются от простых проверок разрешений.Документация:

статус суперпользователя

Суперпользователь базы данных обходит все проверки разрешений, кроме права на вход в систему. Это опасная привилегия, и ею не следует пользоваться небрежно;...

Чтобы увидеть, является ли ваш текущий пользователь является суперпользователем:

SHOW IS_SUPERUSER;

Чтобы перечислить все роли суперпользователя:

SELECT rolname FROM pg_roles WHERE rolsuper;

И владелец схемы тоже может это сделать.документация для 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;

Примерно так же, как \dn в psql.

А ты кто?

SELECT current_user, session_user;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top