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

У меня есть несколько баз данных 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 пропускает значения auto_increment (продолжение)
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Sachindra

    До MySQL 8.0.16 нельзя вычесть привилегии,

    Привилегии, которые пользователь имеет для базы данных, таблицы, столбца или подпрограммы, формируются аддитивно как логическое ИЛИ привилегий учетной записи на каждом из уровней привилегий, включая глобальный уровень. Невозможно отрицать привилегию, предоставленную на более высоком уровне, из-за отсутствия этой привилегии на более низком уровне.

    Попытка сделать это должна дать вам ошибку, например

    Код ошибки: 1141. Такой грант не определен для пользователя «пользователь» на хосте «localhost».

    Вы должны добавить разрешения для всех баз данных по отдельности, например. разрешить конкретно db1 и db2 вместо того, чтобы разрешать все и удалять mysql.

    Начиная с MySQL 8.0.16, вы, наконец, можете удалить доступ для отдельных баз данных (но пока только для баз данных, а не, например, для отдельных таблиц или столбцов):

    Начиная с MySQL 8.0.16, можно явно запретить привилегию, предоставленную на глобальном уровне, отменив ее для определенных баз данных, если системная переменная partial_revokes включена:

    GRANT SELECT, INSERT, UPDATE ON *.* TO u1;
    REVOKE INSERT, UPDATE ON db1.* FROM u1;
    

    Системная переменная partial_revokes должна установить для этого:

    Включение этой переменной позволяет частично отозвать привилегии. В частности, для пользователей, имеющих привилегии на глобальном уровне, partial_revokes позволяет отзывать привилегии для определенных схем, оставляя привилегии для других схем. Например, пользователю, имеющему глобальную привилегию UPDATE, можно запретить использовать эту привилегию в системной схеме mysql. (Или, другими словами, пользователь может использовать привилегию UPDATE для всех схем, кроме схемы mysql.) В этом смысле глобальная привилегия UPDATE пользователя частично аннулируется.

    Выделенная жирным шрифтом часть — это именно то, что вы пытаетесь сделать.

    Спасибо, это было действительно полезно. Просто основной вопрос: по умолчанию у пользователя есть привилегия вставки/обновления/удаления для базы данных 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

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: