Поиск по сайту:
Надо знать обо всем понемножку, но все о немногом (К.А. Тимирязьев).

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

06.10.2020
Привилегия файла 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"

 

Читать  Как изменить порт по умолчанию для Redis

Вы можете найти настройку в файле 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

Мы также должны отметить, что 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';

 

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Система uname -a #Показать информацию о ядре/операционной системе/процессоре head -n…

Спасибо!

Теперь редакторы в курсе.