Мое разрешение неверно?
Да, вы предоставляете учетной записи больше, чем нужно, поэтому ваше заявление GRANT неверно.
Как запретить пользователю без прав администратора изменять таблицы mysql. *?
Когда вы ПРЕДОСТАВЛЯЕТЕ разрешения для создаваемой локальной учетной записи SQL, предоставляйте ей только те разрешения, которые необходимы ей для доступа к записям БД или объектам БД, к которым он должен получить доступ, и ничего более.
Наиболее безопасный способ - предоставить ему только те явные разрешения, которые ему необходимы для явных объектов БД, таких как SELECT для конкретной таблицы или EXECUTE для конкретной хранимой процедуры, например.
Посмотрите на привилегии, предоставляемые MySQL, чтобы лучше понять, к чему каждая привилегия разрешает доступ учетной записи.
Как только вы поймете, как работает каждая привилегия в отношении прав доступа к объектам БД и т.д., Вы можете определить безопасность для создаваемой вами учетной записи SQL.
Когда вы говорите, что не хотите разрешать изменение таблиц mysql, просто помните, что вы можете изменять данные в таблице, где DELETE и UPDATE позволили бы это. Разрешение DROP с другой стороны, позволило бы удалить всю таблицу, или разрешение ALTER позволило бы изменить схему таблицы, определения столбцов или другие объекты, существующие в таблице.
пример
Вы можете использовать нижеприведенное, чтобы предоставить учетной записи SELECT доступ ко всем таблицам и EXECUTE доступ ко всем хранимым процедурам в конкретной БД:
GRANT CREATE, SELECT, EXECUTE ON 'DatabaseName'
TO 'user'@'localhost'
Каждый студент может создать свою собственную базу данных. Так что, теоретически, отказывать в привилегиях базе данных mysql - единственный путь, верно? Как я могу это сделать?
Нет, я проверил и подтвердил, что приведенное ниже решение работает. По сути, вы разрешаете student учетные записи MYSQL GRANT ALL PRIVILEGES но только БД, соответствующие определенному шаблону именования.
Это означает, что когда вы заставляете учеников выполнять упражнения, вам необходимо убедиться, что у созданных ими БД есть имя, соответствующее этому шаблону. Это также означает, что выбранный вами шаблон соглашения об именах НЕ должен соответствовать шаблону, как другие БД, к которым вы не хотите, чтобы они обращались.
Опять же, я проверил и подтвердил, что это решение работает и является довольно простым решением, чем явное использование разрешений DENY что может быть опасно, поскольку вы можете легко пропустить или не протестировать каждый возможный сценарий, и это является причиной, по которой вы DENY всего и только GRANT что Вы хотите, чтобы безопасность была мудрой.
пример
GRANT ALL PRIVILEGES ON `student\_%` . * TO 'student'@'%';
Источник кредита
Теперь пользователь с именем student может создать любую базу данных на экземпляре MYSQL, если она имеет имя или начинается с student_ . Обратная косая черта является escape-символом для символа подчеркивания.