Подтвердить что ты не робот

Предоставить файл только в одной базе данных

Я хочу разрешить команду LOAD DATA для пользователя john mysql. Поэтому я вошел в терминал mysql как root и выпустил следующую инструкцию:

grant file on johndatabase.* to 'john'@'localhost';

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

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

Если я заменил johndatabase.* на *.*, тогда все будет работать. Но означает ли *.* все базы данных? Я хочу ограничить пользователя mysql john просто johndatabase.

4b9b3361

Ответ 1

Вы не можете предоставлять привилегии FILE только для одной базы данных. Это логически не имеет никакого смысла. Посмотрите, что документы говорят:

Признак FILE дает вам право на чтение и запись файлов на сервер с использованием команды LOAD DATA INFILE и SELECT... INTO OUTFILE и функцию LOAD_FILE(). Пользователь, у которого есть ФАЙЛ привилегия может читать любой файл на хосте сервера, который либо читаемый или читаемый на сервере MySQL. (Это означает, что пользователь может читать любой файл в любом каталоге базы данных, поскольку сервер может доступ к любому из этих файлов.)

Таким образом, привилегия FILE является глобальной привилегией. Он затрагивает все файлы на сервере и разрешает доступ только к глобальным командам (например, LOAD DATA INFILE и т.д.), А не к какой-либо базе данных. Единственный способ предоставить права FILE - это все базы данных, используя этот синтаксис:

GRANT FILE ON *.* TO 'john'@'localhost';

Ответ 2

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