Mysql предоставляет разрешения для всех баз данных, начинающихся с <string>

Если проекту требуется несколько баз данных mySql, начинающихся с одного и того же <string>, и кто-то желает предоставить пользователю одинаковые разрешения для всех из них, какой способ является наиболее элегантным?

пример:

<string>_db_1
<string>_db_2
<string>_db_3
...
<string>_db_n

GRANT <privileges> ON <database> . * TO 'user'@'localhost';

Кажется, это невозможно сделать, используя только SQL. Однако это довольно просто сделать на любом языке программирования. Просто пропустите запрос mysql.db.

Ildar Akhmetov 10.08.2018 17:07
5
1
392
1

Ответы 1

Вот как можно попробовать:

mysql> create user 'alex'@'localhost' identified by 'xxxxxxxxxxxx';
Query OK, 0 rows affected (0.00 sec)

mysql> grant create,select,insert,update,delete on `somestring_db_%`.* to 'alex'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> \q
Bye

[root @ test ~] # mysql -u alex -p
Введите пароль:
Добро пожаловать в монитор MySQL. Команды заканчиваются на; или \ g.
Ваш идентификатор подключения MySQL - 7
Версия сервера: 5.7.28 MySQL Community Server (GPL)
....
...
..
Введите "помощь"; или '\ h' для помощи. Введите '\ c', чтобы очистить текущий оператор ввода.

Вы принудительно подключаете ssl через сокет unix. Пожалуйста примите к сведению отключение ssl, так как он не устанавливает соединение через сокет unix более безопасный.

mysql> show grants;
+-------------------------------------------------------------------------------------------+
| Grants for alex@localhost |
+-------------------------------------------------------------------------------------------+
| GRANT USAGE ON . TO 'alex'@'localhost' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ON somestring_db_%.* TO 'alex'@'localhost' |
+-------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> create database somestring_db_1;
Query OK, 1 row affected (0.00 sec)

mysql> create database somestring_db_2;
Query OK, 1 row affected (0.00 sec)

mysql> create database somestring_db_3;
Query OK, 1 row affected (0.00 sec)

mysql> use somestring_db_1;
Database changed
mysql> create table test ( id int not null,name varchar(10) not null );
Query OK, 0 rows affected (0.50 sec)

mysql> insert into test values (1,'Hey'),(2,'there!'),(3,'It Works!!');
Query OK, 3 rows affected (0.18 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from test;
+----+------------+
| id | name |
+----+------------+
| 1 | Hey |
| 2 | there! |
| 3 | It Works!! |
+----+------------+
3 rows in set (0.01 sec)

mysql> delete from test;
Query OK, 3 rows affected (0.25 sec)

mysql> select * from test;
Empty set (0.00 sec)

Другие вопросы по теме