2016-08-16 3 views
0

Я использую PostGresSQL в качестве базы данных для одного из моих приложений. Для поддержки многопользовательской работы я использовал схемы и роли для каждого арендатора, чтобы ограничить доступ и предотвратить утечку данных в случае SQL-инъекции. Я поддерживаю один пул соединений, а затем выполняю SET ROLE после определения контекста арендатора, чтобы он мог получить доступ только к своей собственной схеме. Все это хорошо работает. Однако, каков эквивалентный дизайн в mySQL? Я видел, что у mySQL нет «ролей», а схема/база данных одинаково концептуально, как я могу добиться чего-то подобного в mySQL? Я спрашиваю, потому что я разрабатываю другое приложение, и мне говорят использовать mySQL вместо PGSQL.postgres схемы и роли в mySQL

Благодаря

ответ

1

Поскольку MySQL не имеет концепции ролей, вы должны либо использовать различные базы данных пользователей MySQL и базы данных для достижения того же логического разделения данных. Эффективно, после определения контекста, вам нужно подключиться к mysql, используя другую учетную запись пользователя myswl и другую базу данных по умолчанию. Недостатком является то, что это решение сделает инертный пул соединений. К счастью, в MySQL установление нового соединения с базой данных происходит быстро и не требует слишком большого количества ресурсов.

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

В качестве третьей альтернативы с ограниченным числом пользователей вы можете использовать ту же учетную запись пользователя mysql и базу данных по умолчанию для подключения к mysql, но хранить фактические данные пользователя в отдельных базах данных, доступных только с использованием отдельных учетных записей пользователей mysql. Однако в этой базе данных по умолчанию создайте отдельный views для каждой таблицы в пользовательских базах данных. В инструкции create view задайте условие definer учетной записи пользователя mysql, которая может получить доступ к данной базе данных, где хранится таблица, и установить условие безопасности sql для определения. Таким образом, вы все равно можете использовать пул соединений, поскольку соединения выполняются с использованием общего идентификатора пользователя в базе данных по умолчанию. Данные клиента будут логически разделены в базах данных. Недостатком является то, что через представления в базе данных по умолчанию все данные будут доступны, и любые изменения в базовой структуре данных должны также отражаться в представлениях.