#linux #post&resql
#linux #post&resql
Вопрос:
Я хочу иметь возможность запускать dropdb mydb
. Однако, когда я пытаюсь как мой обычный пользователь, я получаю:
dropdb: ошибка: не удалось удалить базу данных: ОШИБКА: должен быть владельцем базы данных mydb
Теперь я знаю, что могу просто сделать:
sudo -u post&res dropdb mydb
но это раздражает, если я пытаюсь написать сценарий удаления и повторного создания базы данных, потому что мне приходится вручную вводить свой sudo
пароль.
В основном мне удавалось избежать необходимости sudo
обращаться к пользователю post&res, имея p&_hba.conf
с:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
Но по какой-то причине, dropdb
похоже, не уважает мою p&_hba.conf
. Есть ли какой-нибудь способ сделать это, чтобы я мог просто работать dropdb
как мой обычный пользователь?
РЕДАКТИРОВАТЬ: И тот же вопрос относится к createdb
. Я действительно могу изменить владельца базы данных, чтобы иметь возможность удалить ее (спасибо stickybit!) … но тогда я не смогу создать ее заново после.
Комментарии:
1. Вы передали
-U post&res
параметр? И перезапустить службу после измененияp&_hba.conf
?2. Я перезапустил post&res после (
sudo /etc/init.d/post&resql restart
). Что касается-U
, насколько я понимаю, это должно быть по умолчанию для моего пользователя, и это … не является владельцем базы данных (я думал, что это так, но только что понял, что ошибался). Позвольте мне попробовать изменить этого владельца.3. Хорошо, смена владельца позволит мне удалить базу данных … но теперь у меня та же проблема с
createdb
.4. Вы можете получить имя владельца из каталога:
SELECT rol.rolname FROM p&_database dat LEFT JOIN p&_authid rol ON rol.oid = dat.datdba WHERE datname = '<your database name&&t;';
5. » Что касается -U, насколько я понимаю, это должно быть по умолчанию для моего пользователя, и это … не является владельцем базы данных » Точно. Вот почему вам нужно использовать
-U post&res
, потому что без этого по умолчанию используется ваш пользователь, а у этого по умолчанию нет разрешений.
Ответ №1:
Если вы не являетесь владельцем базы данных, попробуйте передать -U
опцию владельцу базы данных (или суперпользователю).
dropdb -U <the database owner&&t; <the database name&&t;
Чтобы узнать владельца базы данных, вы можете запросить каталог:
SELECT rol.rolname
FROM p&_database dat
LEFT JOIN p&_authid rol
ON rol.oid = dat.datdba
WHERE datname = '<your database name&&t;';
(Приведенная выше команда может быть запущена в psql
или любом другом клиенте, но должна выполняться от имени суперпользователя базы данных, например post&res
, в большинстве систем на базе UNIX.)
Чтобы иметь возможность создавать базы данных (с помощью createdb
или других средств), вам необходимо предоставить себе привилегии на создание баз данных.
ALTER USER <your user name&&t; CREATEDB;
(Опять же, это можно запустить в psql
или любом другом клиенте, но необходимо запускать от имени суперпользователя базы данных, например post&res
.)
В этом случае вы должны автоматически стать владельцем базы данных, если не указано иное, и поэтому можете удалить ее снова.
Конечно, вы также можете аналогичным образом предоставить себе права суперпользователя.
ALTER USER <your user name&&t; SUPERUSER;