Подтвердить что ты не робот

Пусть пользователи MySQL создают базы данных, но разрешают доступ только к собственным базам данных

Я хочу, чтобы несколько пользователей MySQL могли выпускать команды типа

CREATE DATABASE dbTest;

Но я также хочу, чтобы каждый из этих пользователей мог видеть и получать доступ только к своим собственным базам данных.

Все, что я мог найти, - это как создать базы данных администратором баз данных и предоставить привилегии этой базе данных конкретному пользователю:

GRANT ALL PRIVILEGES ON dbTest.* TO 'user';

или предоставить пользователям права доступа для всех баз данных:

GRANT ALL PRIVILEGES ON *.* TO 'user';

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

4b9b3361

Ответ 1

Вы можете использовать

GRANT ALL PRIVILEGES ON `testuser\_%` .  * TO 'testuser'@'%';

предоставить пользователю testuser привилегии для всех баз данных с именами, начинающимися с testuser_.

Это позволяет тестировщику создавать базы данных, ограниченные именами, начинающимися с testuser _

Ответ 2

Вы можете использовать

GRANT ALL PRIVILEGES ON `testuser_%` . * TO 'testuser'@'%';

предоставить пользователю testuser привилегии для всех баз данных с именами, начинающимися с testuser_.

EDIT: я не уверен, что теперь этому пользователю также разрешено создавать базы данных.

Да, это позволяет testuser создавать базы данных, ограниченные именами, начинающимися с testuser_

Ответ 3

Создайте хранимую процедуру, определенную пользователем admin, и вызовите ее с правами администратора, используя SQL SECURITY DEFINER. В хранимой процедуре

  • Создайте базу данных.
  • Установите привилегии в базе данных, чтобы доступ только к текущему пользователю.
  • Выполните FLUSH PRIVILEGES, чтобы перезагрузить привилегии из таблиц грантов.

Используйте USER(), чтобы получить последние данные для входа в систему.

Узнайте больше о SQL SECURITY DEFINER.

Ответ 4

Это невозможно использовать только разрешения только.

Обходной путь, предложенный в другом ответе: GRANT ALL PRIVILEGES ON TestUser _% . * TO 'testuser'@'%'; возникает проблема, заключающаяся в том, что пользователи должны быть очень осторожны при именовании своих баз данных.

Например, если пользователь aaa создает базу данных bbb_xyz, к ней затем может обращаться только пользователь bbb, но не пользователь aaa.