Пусть пользователи MySQL создают базы данных, но разрешают доступ только к собственным базам данных
Я хочу, чтобы несколько пользователей MySQL могли выпускать команды типа
CREATE DATABASE dbTest;
Но я также хочу, чтобы каждый из этих пользователей мог видеть и получать доступ только к своим собственным базам данных.
Все, что я мог найти, - это как создать базы данных администратором баз данных и предоставить привилегии этой базе данных конкретному пользователю:
GRANT ALL PRIVILEGES ON dbTest.* TO 'user';
или предоставить пользователям права доступа для всех баз данных:
GRANT ALL PRIVILEGES ON *.* TO 'user';
Но я не хочу этого, потому что он должен масштабироваться и быть в безопасности.
Ответы
Ответ 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
.