Отказано в доступе для пользователя 'root' @ '%' (с паролем: ДА) с Google Cloud MYSQL Экземпляр - PullRequest
0 голосов
/ 03 августа 2020

Я создал облако Google MYSQL Экземпляр и пытаюсь загрузить файл CSV в MYSQL, используя запрос ниже.

LOAD DATA  INFILE 'D:/test.csv' 
INTO TABLE discounts 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(title,@expired_date,amount)
SET expired_date = STR_TO_DATE(@expired_date, '%m/%d/%Y');

Но получаю ошибку ниже.

Код ошибки : 1045. Доступ запрещен для пользователя 'root' @ '%' (с паролем: YES)

1 Ответ

0 голосов
/ 15 августа 2020

Я думаю, здесь могут быть 1 или 2 проблемы:

  1. Проблемы с аутентификацией, как указано в esqew
  2. Проблемы с привилегиями, связанные с запросом, который вы пытаетесь выполнить

Проблемы с аутентификацией

Перед тем, как мы go следующий шаг, я предполагаю, что вы могли выполнять запросы SELECT со своим root пользователем в этом облаке SQL сервер. В противном случае, вероятно, возникла проблема с аутентификацией, и было бы лучше проверить, есть ли у вас правильный пароль пользователя «root». Чтобы изменить пароль [1]:

  1. Go на страницу Cloud SQL Instances в Google Cloud Console.
  2. Щелкните экземпляр, чтобы открыть его обзор страница.
  3. Выберите Пользователи в меню навигации.
  4. Найдите пользователя root со значением Хоста% (любой хост) и выберите Изменить пароль в меню дополнительных действий
  5. Введите надежный пароль, который вы можете запомнить, и нажмите ОК.

Проблемы с привилегиями

По умолчанию разрешения пользователя root ограничено в облаке SQL. Это означает, что пользователь root не имеет привилегий FILE и SUPER, которые были бы у вас на большинстве других серверов [2]. Чтобы выполнить упомянутый выше запрос LOAD DATA INFILE, необходимо учитывать два важных момента:

  1. mysql предполагает, что файл находится на сервере [3, точка начала с «Если LOCAL не указано]». Поскольку облачные серверы SQL работают на Linux, путь, начинающийся с D:\, не имеет особого смысла для сервера.
  2. LOAD DATA INFILE требует разрешения FILE, которое Cloud SQL не предоставляет пользователю root. Следовательно, у вас не будет разрешения на выполнение этого запроса [4].

Чтобы предотвратить проблему с разрешением и выполнить загрузку данных с локального компьютера по назначению, вам разрешено использовать LOAD DATA LOCAL INFILE в CloudSQL [5] и используйте указанный выше локальный путь (см. Также [3]).

[1] https://cloud.google.com/sql/docs/mysql/create-manage-users#user - root

[2] https://cloud.google.com/sql/docs/mysql/users#root -пользователь

[3] https://dev.mysql.com/doc/refman/5.7/en/load-data.html#load -data-input-file

[4 ] https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_file

[5] https://cloud.google.com/sql/docs/mysql/import-export/importing

...