Почему я могу удалить таблицу, если я вошел в систему как не владелец?
-
29-09-2020 - |
Вопрос
Я читал, что только владелец может удалить таблицу, и ни один другой пользователь не может сделать это.
Я создал таблицу с владельцем 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;