ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Привилегия файла MySQL

Привилегия файла MySQL

При подготовке набора инструкций по созданию экземпляра MySQL 8 (8.0.21) Windows 10 мы обнаружили ошибку с командой LOAD и переменной –secure-file_priv, установленной в файле my.ini. После предоставления глобального разрешения FILE ранее подготовленному пользователю andreyex:

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

Любая попытка выполнить следующую команду не удалась:

LOAD DATA INFILE 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\avenger.csv'
INTO TABLE avenger
FIELDS TERMINATED BY ', '
ENCLOSED BY ', '
ESCAPED BY '\ \'
LINES TERMINATED BY '\r\n';

и выведите это сообщение об ошибке:

ERROR: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

 

Следующее охватывает мое исследование, чтобы попытаться исправить эту ошибку, не удаляя специальный каталог для безопасной загрузки файлов. Хотя MySQL 5.7 содержит запрос переменной server-file-priv, в документе «Переменные системного сервера MySQL» нет ничего о том, как устранить неполадки при установке переменной server-file-priv. Так или иначе, мы думаем, что следует упомянуть, как разрешить эту ошибку, не отключая переменную server-file-privy.

Проверили и исправили все права доступа Windows 10 для совместного использования и чтения-записи в указанном каталоге secure-file-priv. В настройках Windows 10 разрешено глобальное совместное использование, а также права на чтение и запись, но команде LOAD не удалось загрузить содержимое файла из авторизованного каталога Uploads.

Привилегия FILE в MySQL – это глобальная привилегия для чтения и записи файлов на локальном сервере. Установка MySQL 8 в Windows 10 устанавливает следующий каталог в качестве цели для загрузки файлов в файл my.ini:

# Secure File Priv.
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"

 

Вы можете найти настройку в файле C:\ProgramData\MySQL\MySQL Server 8.0\my.ini. Вы можете найти это значение, не обращаясь к файлу my.ini, запросив данные:

show variables like 'secure_file_priv';

 

Новая установка должна вернуться:

+------------------+------------------------------------------------+
| Variable_name    | Value                                          |
+------------------+------------------------------------------------+
| secure_file_priv | C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ |
+------------------+------------------------------------------------+
1 row in set (0.2253 sec)

 

Вы можете найти файл my.ini в каталоге C:\ProgramData\MySQL\MySQL Server 8.0 стандартной файловой системы Windows 10.

  1. Используя проводник Windows, мы проверили права доступа к каталогу Uploads, щелкнув каталог Uploads правой кнопкой мыши, чтобы проверить свойства каталога в диалоговом окне проводника.
  2. Общая вкладка показывает, что файлы только для чтения.Мы сняли флажок только для чтения. Затем повторно проверили его с теми же отрицательными результатами.
  3. Sharing вкладка показывает, что файлы Shared.При нажатии кнопки «Поделиться…» файлы в этом каталоге становятся общими с разрешениями на чтение и запись для всех.
  4. Безопасность вкладка показывает , что файлы Каждый имеет полный контроль файлов в этом каталоге.

К сожалению, при правильной настройке всех этих параметров переменная secure-file-priv блокирует чтение файлов из указанного безопасного каталога. Оказалось, что нам, возможно, придется удалить настройку secure-file-priv из файла my.ini и перезагрузить сервер. Затем мы обнаружили свою ошибку в команде SQL LOAD.

Единственный способ работы команды LOAD требовал следующих шагов:

  1. Помещаем файл avenger.csv в следующий каталог, на который указывает значение secure-file-privs в my.ini.
    C:\ProgramData\MySQL\MySQL Server 8.0\Uploads
  2. Оператор LOAD в SQL обновлен, чтобы использовать обратные кавычки для обратной косой черты:
    LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\avenger.csv'
    INTO TABLE avenger
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    ESCAPED BY '\\'
    LINES TERMINATED BY '\r\n';

    Команда LOAD сработала и поместила содержимое файла CSV в avengerтаблицу, как показано в результатах запроса ниже:

    +------------+--------------+------------+-------------------+
    | avenger_id |  first_name  | last_name  | character_name    |
    +------------+--------------+------------+-------------------+
    |          1 |  'AndreyEx'  | 'Delphi'   | 'Delphi'          |
    |          2 |  'MasterMen' | 'Dolgov'   | 'Titan'           |
    |          3 |  'Alex'      | 'Smirnov'  | 'Shrek'           |
    +------------+--------------+------------+-------------------+
    3 rows in set (0.0005 sec)

Однако вот как вы заставляете это работать. Естественно, вы можете указать переменную secure-file-privs в другом месте по вашему выбору.

Мы также должны отметить, что MySQL достаточно умен, чтобы заменить прямую косую черту на обратную косую черту в ОС Windows. Это означает, что вы также можете использовать следующий оператор SQL LOAD:

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/avenger.csv'
INTO TABLE avenger
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '/'
LINES TERMINATED BY '\r\n';

 

Как всегда, мы надеемся, что это поможет тем, кто ищет решение.

Exit mobile version