Мое разрешение неверно?
Да, вы предоставляете учетной записи больше, чем нужно, поэтому ваше заявление 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-символом для символа подчеркивания.