Назад | Перейти на главную страницу

Наличие баз данных Postgres для физического хранения во вложенной папке домашнего каталога пользователя Ubuntu

В настоящее время я настраиваю сервер Ubuntu 18.04, где множеству разных пользователей предоставляется доступ по SSH, включая доступ к серверу Postgres SQL и возможность создавать свои собственные базы данных Postgres.

Я хотел бы сделать следующее. Когда пользователи создают свои собственные базы данных Postgres, я хочу, чтобы эти новые базы данных автоматически физически сохранялись в подпапке домашнего каталога пользователя.

Обратите внимание, что я знаю, что есть способы явно выбрать альтернативные места на физических дисках для создания баз данных, кроме местоположения по умолчанию Postgres. Однако я не могу найти способ настроить Postgres, чтобы он обеспечить соблюдение всех базы данных, созданные данным пользователем, автоматически сохраняются в домашнем каталоге этого пользователя Ubuntu. То есть, не требуя от пользователей выбора своих собственных подпапок домашнего каталога в качестве места назначения новой базы данных.

Конечно, я мог бы автоматически создать для каждого пользователя Ubuntu альтернативное местоположение Postgres в домашнем каталоге пользователя (по ссылке, указанной выше). Но по-прежнему не требует физического хранения созданных пользователями баз данных там, а не в стандартном месте установки Postgres.

Будем очень признательны за любые подсказки.

Предполагая, что у вас уже есть пользователь PostgreSQL bob, который соответствует пользователю системы bob с домашним каталогом /home/bob, и вы хотите хранить данные PostgreSQL в /home/bob/pg, который уже существует и имеет разрешения, подходящие для доступа к серверу базы данных PostgreSQL, следующая процедура может работать, если вы используете относительно недавнюю версию PostgreSQL.

  1. Создайте новое табличное пространство для пользователя:

    CREATE TABLESPACE bob OWNER bob LOCATION '/home/bob/pg`;
    
  2. Установите для пользователя табличное пространство по умолчанию:

    ALTER USER bob SET default_tablespace = bob;
    

Однако это не помешает bob от создания объектов в другом (в частности, по умолчанию) табличном пространстве, поэтому вам нужно REVOKE bobпривилегии из табличного пространства по умолчанию:

REVOKE ALL ON TABLESPACE pg_default FROM bob;

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

Более того, еще одна проблема, с которой вы столкнетесь, - это маркировка SELinux. Новая область должна быть правильно помечена, чтобы postgres мог получить доступ к файлам в каталоге пользователя, а также внести ряд изменений в SELinux. Я предполагаю, что в качестве хорошего типа системы вы будете запускать SELinux в принудительном режиме.

Резюме ... вы можете это сделать, но для обеспечения безопасности и целостности системы потребуется много работы и анализа.