Создать пользователя и отозвать у него доступ к определенной базе данных на MariaDB - PullRequest
1 голос
/ 15 июня 2019

Есть ли простой способ создать пользователя и предоставить все привилегии всем базам данных, кроме определенной?

Я пробовал это

CREATE USER 'demo'@'%' IDENTIFIED BY 'QbSv9qUj2EJ8mxm2';
GRANT ALL PRIVILEGES ON *.* TO 'demo'@'%';
REVOKE ALL ON id8694160_sqless.* FROM 'demo'@'%'; -- this is the DB I don't want the user to have access to
SHOW GRANTS FOR 'demo'@'%';

Но я получаю следующую ошибку:

Error Code: 1141. There is no such grant defined for user 'demo' on host '%'

Возможно ли это вообще?

1 Ответ

0 голосов
/ 15 июня 2019

Согласно документации :

Глобальные привилегии предоставляются с использованием *. * Для priv_level. Глобальные привилегии включают привилегии для администрирования базы данных и управления учетными записями пользователей, а также привилегии для всех таблиц, функций и процедур. Глобальные привилегии хранятся в таблице mysql.user.

Права доступа к базе данных предоставляются с использованием db_name. * Для priv_level или с использованием только * для использования базы данных по умолчанию. Привилегии базы данных включают привилегии для создания таблиц и функций, а также привилегии для всех таблиц, функций и процедур в базе данных. Привилегии базы данных хранятся в таблице mysql.db.

Это означает, что привилегии, которые вы предоставляете с помощью GRANT ALL PRIVILEGES ON *.* TO 'demo'@'%';, представлены одной строкой в ​​таблице mysql.user. Отзыв привилегий только для одной базы данных из этих глобальных привилегий означает удаление глобальных привилегий из таблицы mysql.user и добавление одной привилегии базы данных для каждой базы данных, кроме базы данных id8694160_sqless, в таблице mysql.db.

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

INSERT INTO mysql.db
SELECT '%',schema_name,'demo','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'
FROM information_schema.schemata
WHERE NOT schema_name = 'mysql'
AND NOT schema_name = 'information_schema'
AND NOT schema_name = 'performance_schema'
AND NOT schema_name = 'id8694160_sqless';
FLUSH PRIVILEGES;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...