Забыв, что $ _ перезаписывается в блоках, я пару раз почесал голову в замешательстве, и аналогично для нескольких регулярных совпадений и массива $ match. .> & Л;
Простой способ: для каждой разделяемой таблицы добавьте столбец с именем SEGMENT_ID. Назначенный правильный SEGMENT_ID для каждого клиента. Затем создайте представления для каждой клиентской базы по SEGMENT_ID. Эти представления будут хранить данные отдельно от каждого клиента. С помощью этого метода можно обмениваться информацией, что упрощает как операции, так и & amp; разработка (хранимая процедура также может быть разделена) проста.
Для конкретного пользователя БД вы можете предоставить членство в группах, указав компании, к которым им разрешен доступ.
Я предполагаю, что у вас будет таблица Companies
, поэтому просто создайте отношение один-ко-многим между Companies
и MySQLUsers
или что-то подобное.
Затем, в качестве условия всех ваших запросов, просто сопоставьте CompanyID
на основе UserID
В MySQL я предпочитаю использовать одну базу данных для всех арендаторов. Я ограничиваю доступ к данным, используя отдельного пользователя базы данных для каждого арендатора, который имеет доступ только к представлениям, которые показывают только строки, принадлежащие этому арендатору.
Это можно сделать следующим образом:
I ' я полностью задокументировал это в своем блоге: https://opensource.io/it/mysql-multi-tenant/