MySql 中 skip-grant-tables(跳过权限验证的问题)

我们安装MySql 设置my.ini配置文件的时候,常常会添加

skip-grant-tables  #跳过数据库权限验证

这常常导致一个现象,本地连接数据库可以使用任意账号或者密码。

但是去掉之后,又常常会出现ERROR 1045等问题。

这可能是因为数据库中用户密码的问题。所以我们可以跳过数据权限验证,重新设置一下。

ERROR 1045问题:https://blog.csdn.net/qq_28938933/article/details/72872064

<think>嗯,用户遇到了MySQL 5.7中skip-grant-tables失效的问题。首先,我需要回忆一下MySQL权限系统在5.7版本中的变化。记得从5.7开始,MySQL对密码验证方式进行了改进,可能影响了传统的跳过授权表的方法。用户可能按照旧版本的方法修改配置文件,添加了skip-grant-tables,但启动时仍然报错或者无法登录。 根据引用中的信息,用户提到在配置文件中添加skip-grant-tables后启动报错,比如引用[2]中的情况。可能的原因包括配置文件的位置不正确,或者语法错误。需要确认用户是否正确编辑了my.cnf文件,通常位于/etc/my.cnf或/etc/mysql/my.cnf,也有可能在datadir目录下。此外,权限问题也可能导致服务无法启动,比如文件权限设置不正确。 另外,用户可能尝试使用命令行直接启动mysqld并带上参数,如引用[1]提到的使用--console和--shared-memory参数。这说明在某些情况下,仅使用--skip-grant-tables可能不够,需要结合其他参数来绕过权限检查。同时,用户可能需要以安全模式启动,停止正在运行的MySQL服务,确保没有其他实例干扰,如引用[3]中提到的停止服务步骤。 在密码重置步骤中,5.7版本之后,user表的密码字段改成了authentication_string,所以需要使用ALTER USER语句来修改密码。但如果在skip-grant-tables模式下,可能需要先更新这个字段,然后刷新权限。同时,密码策略可能更严格,需要设置足够复杂的密码,或者暂时关闭策略插件。 用户可能遇到的另一个问题是,在修改密码后仍然无法登录,这可能是因为skip-grant-tables模式下,权限检查被禁用,但重启服务时没有正确加载新的配置。需要确保在修改密码后,移除skip-grant-tables选项,并正常重启服务,使权限系统重新生效。 还需要考虑SELinux或AppArmor等安全模块是否阻止了MySQL的启动,特别是在修改配置文件后。临时禁用这些安全模块或者调整策略可能有助于解决问题。 总结来说,解决方案需要分步骤:正确配置my.cnf,确保服务以skip-grant-tables启动,然后通过安全方式登录并修改密码,最后恢复配置并重启服务。同时处理可能的权限和安全策略问题。</think>### 解决MySQL 5.7中`skip-grant-tables`失效的步骤 #### 1. **确认配置文件位置与语法** - MySQL 5.7的配置文件通常为`/etc/my.cnf`或`/etc/mysql/my.cnf`。部分系统可能位于`/usr/my.cnf`或数据目录下。 - 在`[mysqld]`区块下添加以下内容: ```ini skip-grant-tables skip-networking ``` 这会跳过权限验证并禁用网络连接,提升安全性[^2][^3]。 #### 2. **以安全模式启动MySQL** - 停止正在运行的MySQL服务: ```bash systemctl stop mysqld ``` - 通过命令行启动MySQL跳过权限表: ```bash mysqld_safe --skip-grant-tables --skip-networking & ``` 若提示权限问题,可尝试添加`--user=mysql`参数[^3]。 #### 3. **重置密码** - 连接到MySQL(无需密码): ```bash mysql -u root ``` - 执行以下SQL语句(注意MySQL 5.7的密码字段为`authentication_string`): ```sql UPDATE mysql.user SET authentication_string = PASSWORD('新密码') WHERE User = 'root'; FLUSH PRIVILEGES; EXIT; ``` 若报错,可尝试直接置空密码: ```sql UPDATE mysql.user SET authentication_string = '' WHERE User = 'root'; ``` #### 4. **恢复配置文件并重启服务** - 移除`my.cnf`中添加的`skip-grant-tables`和`skip-networking`。 - 重启MySQL服务: ```bash systemctl restart mysqld ``` #### 5. **处理密码策略问题** - 若重置后仍无法登录,可能需调整密码策略: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码' PASSWORD EXPIRE NEVER; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; ``` #### 6. **检查日志与权限** - 查看MySQL错误日志定位问题: ```bash tail -f /var/log/mysqld.log ``` - 确保配置文件权限正确: ```bash chmod 644 /etc/my.cnf ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值