【问题标题】:MySQL error : Access denied for user (using password:NO) - pythonMySQL错误:用户访问被拒绝(使用密码:NO)-python
【发布时间】:2023-11-09 14:03:01
【问题描述】:

我是 MySQL 新手,我正在尝试使用 MySQL 数据库和 python 以及 FLask 作为服务器端框架来制作一个简单的注册表单。

在 localhost 中运行代码时出现以下错误:

MySQL 配置:

app.config['MySQL_HOST'] ='localhost'
app.config['MySQL_USER'] = 'blacksmith'
app.config['MySQL_PASSWORD'] = '123456'
app.config['MySQL_DB'] = 'myflaskapp'
app.config['MySQL_CURSORCLASS'] = 'DictCursor'

向路由注册函数

@app.route('/register',methods=['GET','POST']) #route accepts get request per default but we precise here post also
def register():
    form = RegisterForm(request.form)
    if request.method == 'POST' and form.validate(): # check if form is validated and its a post request
        name = form.name.data
        email = form.email.data
        username= form.username.data
        password = sha256_crypt.encrypt(str(form.password.data))

        #create cursor
        cur =mysql.connection.cursor()

        # execute SQL command
        cur.execute("INSERT INTO users(name,email,username,password) VALUES (%s,%s,%s,%s)",(name,email,username,password) )

        #commit to DB
        mysql.connection.commit()

        #close connection
        cur.close()

    return render_template('register.htm',form=form)

当我使用命令在我的 bash shell 中访问 MySQL shell 时,我也遇到了同样的错误(Access denied for user root@localhost

mysql -u root

(我必须使用 sudo 命令 来访问数据库)

我没有为 MySQL 数据库访问设置 任何密码 的问题,即使尝试使用命令使用另一个密码更改它,同样的错误仍然存​​在:

ALTER USER 'user'@'hostname' IDENTIFIED BY 'newPass';

我也尝试在 MySQL 配置中更改密码,但没有成功。

请帮帮我!

【问题讨论】:

标签: python mysql flask localhost access-denied


【解决方案1】:

我通过在安全模式下运行 mysql 服务器解决了这个问题:

sudo mysqld_safe --skip-grant-tables
service mysql stop
mysqld_safe --skip-grant-tables &

如果遇到 (mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exist.) 错误

 mkdir -p /var/run/mysqld
 chown -R mysql:mysql /var/run/mysqld
  • 服务器现在在安全模式下工作,打开一个新的 bash 命令并执行

    mysql -u 根目录

应该可以正常使用

【讨论】:

    【解决方案2】:

    “使用密码:否”。因此,无论您在何处创建连接,都无需使用密码。

    【讨论】:

    • 那为什么拒绝访问,有什么问题?
    • 您在配置中设置了MySQL_PASSWORD。错误消息显示它没有被使用。查看mysql.connection 的创建位置,看看它是否真的使用了密码。