拒绝用户"root"@'%"(使用密码:是)使用谷歌云 MYSQL 实例访问



我创建了一个谷歌云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. esqew指出的身份验证问题
  2. 与您尝试执行的查询相关的特权问题

身份验证问题

在我们进入下一步之前,我假设您已经能够在此CloudSQL服务器上与您的根用户执行SELECT查询。如果没有,那么似乎存在身份验证问题,最好检查您是否拥有正确的"root"用户密码。更改密码[1]:

  1. 转到谷歌云控制台中的云SQL实例页面
  2. 单击实例以打开其"概述"页面
  3. 从导航菜单中选择用户
  4. 找到主机值为%的根用户(任何主机(,然后从"更多操作"菜单中选择"更改密码">
  5. 提供一个可以记住的强密码,然后单击"确定">

特权问题

默认情况下,根用户在CloudSQL上的权限是有限的。这意味着根用户缺乏在大多数其他服务器上拥有的FILE和SUPER权限[2]。为了执行上述LOAD DATA INFILE查询,需要考虑两个重要点:

  1. mysql假设文件位于服务器上[3,以"如果未指定LOCAL"开头的点]"由于cloudSQL服务器运行在Linux上,因此以D:开头的路径对服务器来说没有多大意义
  2. LOAD DATA INFILE需要CloudSQL没有提供给根用户的FILE权限。因此,您将无权执行此查询[4]

为了防止权限问题,并按预期从本地计算机加载数据,允许您在CloudSQL[5]上使用LOAD DATA LOCAL INFILE语句,并使用您在上面指定的本地路径(另请参见[3](。

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

[2]https://cloud.google.com/sql/docs/mysql/users#root-用户

[3]https://dev.mysql.com/doc/refman/5.7/en/load-data.html#load-数据输入文件

[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

相关内容

  • 没有找到相关文章

最新更新