mysql.connector.errors.ProgrammingError: 1698 (28000): Access denied for user 'root'@'localhost'

Posted

技术标签:

【中文标题】mysql.connector.errors.ProgrammingError: 1698 (28000): Access denied for user \'root\'@\'localhost\'【英文标题】:mysql.connector.errors.ProgrammingError: 1698 (28000): Access denied for user 'root'@'localhost'mysql.connector.errors.ProgrammingError: 1698 (28000): Access denied for user 'root'@'localhost' 【发布时间】:2019-08-09 15:22:17 【问题描述】:

我是 Raspberry Pi 和 mysql 的新手。

我在 phpmyadmin 中创建了一个代码数据库,它由我的 PC 中的 wamp 服务器运行。同时,我想在 Raspberry Pi 3 中运行这段代码。除此之外,当我在 Raspberry Pi 3 中运行代码时,我希望数据可以保存在 phpmyadmin 中,因此,当我在我的 PC 上运行 localhost 时,我的数据从 Raspberry Pi 输入的内容也可以保存在 PC 中。但是,当我运行它时,它会显示如下错误消息:

mysql.connector.errors.ProgrammingError: 1698 (28000): 拒绝访问 对于用户'root'@'localhost'

这是我的数据库:

#connect to db
db = mysql.connector.connect(host = 'localhost', user = 'root', password = 
'', database = 'user')

有人知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

使用下面的查询并在您的数据库上执行它。

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;

【讨论】:

当我运行这部分时 INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password(' ')); ,它显示错误 1054 (42S22):“字段列表”中的未知列“密码”。你知道为什么会这样吗?【参考方案2】:

我有一个 Raspberry Pi,并执行了以下步骤:

更新操作系统:

sudo apt-get 更新 && sudo apt-get 升级

安装 mySQL 服务器:

sudo apt-get install mysql-server

安装 mySQL 客户端:

sudo apt-get install mysql-client

检查 mySQL 的状态:

sudo 服务 mysql 状态

安装 mySQL python 连接器:

sudo apt-get -y install python3-mysql.connector

给 mySQL 一个密码:

sudo mysql -uroot

使用mysql;

更新用户集 authentication_string=PASSWORD('mynewpassword') where User='root';

注意:以上命令中保持root用户,只需设置密码即可。

退出 mySQL:

\q

停止 mySQL 服务:

sudo /etc/init.d/mysql 停止

启动 mySQL 服务:

sudo /etc/init.d/mysql 启动

登录数据库测试新密码:

sudo mysql -u root -p

显示数据库;

创建数据库 YOUR_DATABASE_NAME_HERE;

CREATE USER 'YOUR_NEW_USERNAME'@'localhost' IDENTIFIED BY 'YOUR_NEW_PASSWORD';

注意:Python 需要一个新用户才能允许与 mySQL 通信!我不知道为什么,但它有效。

在 Python 中:

import mysql.connector  

# The following code tests Pythons connection to mySQL
mydb = mysql.connector.connect(
  host="localhost",
  user="YOUR_NEW_USER",
  password="YOUR_NEW_PASSWORD"
)

print(mydb)

我花了几天时间从十几个不同的网站拼凑出这些。希望我的笔记没有遗漏任何东西。最后创建新用户似乎是关键问题。我的不是 Windows 安装,但安装应该类似。

【讨论】:

这条评论帮助我在 raspi 中设置了 mydb。我需要设置单独的用户。【参考方案3】:

您应该只在您访问数据库的数据库(mysql)中创建一个用户。

CREATE USER 'nikhil'@'localhost' IDENTIFIED BY 'Password';

密码必须满足要求(1.一个大写,2.一个特殊字符)。 现在使用python

import mysql.connector

mydb = mysql.connector.connect(host="localhost",

user="nikhil",

password="Nikhil_12345",

database="database_name")

print(mydb)

现在为用户添加权限

USE database_name;

GRANT ALL PRIVILEGES ON database_name.* TO 'nikhil'@'localhost';

【讨论】:

【参考方案4】:

有同样的错误

mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'root' @ 'localhost' (using password: NO)

但我试图使用像 CGI 这样的 python 脚本。

这对我有用:

$ sudo mysql -u root
> use mysql;                                                    
> update user set authentication_string=PASSWORD("") where user = "root";
> update user set plugin="mysql_native_password" where user = "root";
> flush privileges;

这是我的代码/usr/lib/cgi-bin/script_cgi.py的一部分:

#!/usr/bin/python3

import mysql.connector

connection = mysql.connector.connect(user='root', password='', host='127.0.0.1', database='books')

你必须给它权限: sudo chmod 755 /usr/lib/cgi-bin/script_cgi.py

您还必须启用 apache 模块: sudo a2enmod cgid

然后访问 localhost,Apache 服务器现在可以使用 Python 脚本作为 CGI: http://127.0.0.1/cgi-bin/script_cgi.py

在https://www.tutorialspoint.com/python/python_cgi_programming.htm中了解更多关于python的CGI

【讨论】:

以上是关于mysql.connector.errors.ProgrammingError: 1698 (28000): Access denied for user 'root'@'localhost'的主要内容,如果未能解决你的问题,请参考以下文章