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'的主要内容,如果未能解决你的问题,请参考以下文章