Использование одного или нескольких пользователей mysql для приложения SaaS PHP / mysql с мультитенантной архитектурой - PullRequest
5 голосов
/ 12 июля 2010

Мы создаем многопользовательское приложение, которое имеет одну базу данных на клиента. Все структуры базы данных клиентов идентичны. Прямо сейчас мы создаем нового пользователя mysql (для каждого клиента), который имеет права только для работы с собственной базой данных.

например. mysql user1 имеет права на dbase1. * (database1.alltables), mysql user2 имеет права на dbase2. *.

Сейчас мы замечаем, что это - уже боль в том, чтобы получить дамп на другой сервер в качестве резервной копии (мы не используем репликацию, но время от времени пытаемся создавать дампы файлов, но база данных information_schema не может быть удалена и воссоздана из файла SQL). кажется.

В любом случае, мы задаемся вопросом, будет ли лучше использовать только одного пользователя, который может получить доступ ко всем базам данных клиентов? Это более небезопасно, верно? Или это может быть использовано довольно безопасным способом? Лучше уж точно справиться.

Что ты думаешь?

Ответы [ 2 ]

3 голосов
/ 12 июля 2010

Что вы можете сделать, это, во время создания для пользователя MySQL, также сохранить запись о создании этого пользователя где-то еще (за пределами БД), а затем иметь скрипт для восстановления пользователей и их разрешений вБД из той записи, которую вы создали.

0 голосов
/ 23 августа 2018

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

  1. Создание пользователя mysql для каждого арендатора (похоже, у вас это уже есть)
  2. Добавление столбца tenant_id (VARCHAR) ко всем таблицам
  3. Использование триггера для автоматического помещения текущего пользователя mysqlв столбце tenant_id в INSERT
  4. Создать представление для каждой таблицы, в котором отображаются только строки, в которых tenant_id = current_mysql_user (не включайте tenant_id в эти представления)
  5. Предоставлять доступ только к этим представлениямпользователи mysql клиента
  6. Определите, какой клиент подключается (возможно, по URL), чтобы определить, какого пользователя mysql следует использовать для подключения к базе данных.

Поскольку ваше приложение будет подключаться кбаза данных, использующая конкретного пользователя, который имеет доступ только к строкам, где tenant_id = их пользователь, dАта будет сегментирован арендатором.

Я смог использовать эту технику для преобразования большого приложения с одним арендатором в мультитенанта в выходные дни с очень небольшими изменениями.Я задокументировал полное решение в своем блоге: https://opensource.io/it/mysql-multi-tenant/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...