У меня есть несколько баз данных MySQL на сервере, БД 1, mysql и БД 2. Я создал пользователя пользователя А. Я хочу отозвать доступ для пользователя А только для одной БД, скажем, mysql, так как это будет иметь несколько таблиц журнала. Я попробовал базовый синтаксис REVOKE, который не работает.
revoke select on mysql.* from [email protected];
Обратите внимание, что отзыв должен происходить только для БД mysql, а не для БД 1 и БД 2.
можете показать вывод forSHOW GRANTS FOR [email protected];
— person Sachindra schedule 19.08.2020
+————————————————- ——+ | Гранты для пользователя @localhost | +————————————————- ——+ | ПРЕДОСТАВЬТЕ ВСЕ ПРИВИЛЕГИИ НА . КОМУ ‘user’@’localhost’ | +————————————————- ——+ 1 ряд в наборе (0,00 сек) — person Sachindra schedule 19.08.2020
Пожалуйста, добавьте свою версию MySQL. До 8.0.16 вы не могли этого сделать, см. Как «вычесть» привилегии в MySQL, поэтому вам нужно будет удалить все права, а затем добавить привилегии для каждой БД. — person Sachindra schedule 19.08.2020
@Solarflare, версия 14.14, дистрибутив 5.7.31 — person Sachindra schedule 19.08.2020
также, согласно предоставленной вами ссылке справки, REVOKE INSERT, UPDATE ON mysql.* FROM [email protected];, там написано ОШИБКА 1141 (42000): Неизвестная ошибка 1141 — person Sachindra schedule 19.08.2020
До MySQL 8.0.16 нельзя вычесть привилегии,
Попытка сделать это должна дать вам ошибку, например
Вы должны добавить разрешения для всех баз данных по отдельности, например. разрешить конкретно db1 и db2 вместо того, чтобы разрешать все и удалять mysql.
Начиная с MySQL 8.0.16, вы, наконец, можете удалить доступ для отдельных баз данных (но пока только для баз данных, а не, например, для отдельных таблиц или столбцов):
Системная переменная
partial_revokes
должна установить для этого:Выделенная жирным шрифтом часть — это именно то, что вы пытаетесь сделать.
Спасибо, это было действительно полезно. Просто основной вопрос: по умолчанию у пользователя есть привилегия вставки/обновления/удаления для базы данных mysql в MySQL? — person Sachindra; 19.08.2020
По умолчанию у пользователя вообще нет разрешений, вы должны предоставить их явно (например, добавить гранты). Незадолго до 8.0.16 вы должны добавить разрешения для каждой базы данных (и не можете выразить всю базу данных, кроме mysql, короче) — person Sachindra; 19.08.2020
если я упомяну ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА . ДЛЯ [email;protected], предоставит ли это право на обновление этому пользователю также для БД mysql? Или есть ограничение на то, чтобы не обновлять базу данных mysql и ее таблицы любым другим пользователем, кроме root? — person Sachindra; 19.08.2020
Да,
GRANT ALL PRIVILEGES ON *.* TO
создает суперпользователя, который может делать все, в том числе все в базе данных mysql. База данных mysql ничем не отличается от любой другой базы данных в системе (ну, по крайней мере, в отношении грантов и тому подобного). — person Sachindra; 19.08.2020если у нас есть зашифрованная БД и мы хотим сохранить ключ шифрования, связку ключей, где мы можем обновить путь к связке ключей для нашей БД?? — person Sachindra; 16.09.2020