怎样处理MySQL数据库拒绝访问
这次给大家带来怎样处理MySQL数据库拒绝访问,处理MySQL数据库拒绝访问的注意事项有哪些,下面就是实战案例,一起来看一下。
用wordpress搭博客,数据库采用MySQL。为了调试方便,创建账户my_account ,允许它从任意主机访问数据库。
CREATE USER `my_account`@'%' IDENTIFIED BY 'my_password';Copy
修改 wp-config.php 相应配置,注意 DB_HOST 设置为 127.0.0.1。
define('DB_USER', 'my_account'); // 账号 define('DB_PASSWORD', 'my_password'); // 密码 define('DB_HOST', '127.0.0.1'); // 数据服务地址Copy
部署到云服务器上,本地浏览器访问博客,提示数据库拒绝访问(本地连接远程数据没问题),以下为错误日志。
ERROR 1045 (28000): Access denied for user 'my_account'@'localhost' (using password: YES)`Copy
简单排查后,解决了问题,这里记录下解决方案,以及出错的原因。
解决方案
1、方案一:删除 mysql.user表 中,Host字段为 localhost 的匿名账号(账户名为空)。
2、方案二:创建 my_account@localhost 账户,用于本地连接数据库。
笔者采用了方案 一。
首先,确认下 mysql.user 表中是否存在匿名账户。
MariaDB [(none)]> SELECT User, Host from mysql.user WHERE Host = 'localhost' AND User = ''; +------+-----------+ | User | Host | +------+-----------+ | | localhost | +------+-----------+ 1 row in set (0.00 sec)Copy
接着,删除相应匿名账户,再次尝试登陆,成功。
MariaDB [(none)]> DROP USER ''@'localhost'; Query OK, 0 rows affected (0.00 sec)Copy
问题分析
为什么匿名账户会导致数据库连接失败?
需要对MySQL的账户创建、客户端连接校验有一定的了解。
创建MySQL账户
基础语法如下:
CREATE USER 账户名@主机 IDENTIFIED BY 密码;Copy
注意点:(以下用 User 指代账户名,Host 指代 主机)
Host 表示 允许账户从哪台主机访问数据库。主要用于做安全限制,可以是 主机名、IP地址、%(通配符);
User 允许重复,只要 Host 是不同的就行。
当 Host 设置为 % 时,表示允许从任意主机连接数据库。
比如,存在两个xiaoming账户,一个允许从本机连接数据库,一个允许从 14.215.177.39 连接数据库。
MariaDB [(none)]> SELECT User, Host FROM mysql.user WHERE User = 'xiaoming'; +---------+---------------+ | User | Host | +---------+---------------+ | xiaoming | 14.215.177.39 | | xiaoming | localhost | +---------+---------------+ 2 rows in set (0.00 sec)Copy
匿名账户
也就是 User 为空的账户,可以匹配任意用户名。如下指令创建了匿名账户。
CREATE USER ''@'localhost' IDENTIFIED BY 'pwd3';Copy
身份校验
数据库服务器收到客户端连接,首先会进行身份校验,将 User、Host、Password 字段,跟 mysql.user 表里的记录进行比较,确认是否合法账户。
这里有个问题:如果 mysql.user表 中存在多条匹配记录,该以哪条记录为准?
答案是“优先级”。大致规则如下:
首先,检查 Host 字段。如果有多个 Host 符合条件,则选择匹配度最高的记录(IP地址 > 通配符%)。
其次,检查 User 字段。如果有多个 User 符合条件,则选择匹配度最高的记录。匿名用户可以匹配任何用户,因此匹配度最低。
优先级匹配例子
举例,假设本地数据库有如下两个账户(Password字段实际非明文)。
+------------+-----------+-----------+ | User | Host | Password | +------------+-----------+-----------+ | my_account | % | 123 | | | localhost | 456 | +------------+-----------+-----------+Copy
运行如下命令,最终登录的账户,匹配的是 第2条 记录。(读者可自行尝试,输入密码123登录失败,输入456登录成功)
mysql -u my_account -pCopy
为什么呢?回顾下匹配的优先级。
首先,检查 Host 字段。localhost、% 都符合要求。localhost 匹配度高于 %,因此匹配到第2条记录。
接着,检查 User 字段。第2条记录是匿名账户,可匹配任意User值,因此,第2条记录符合要求。
因此,虽然账户 my_account 的 Host字段 为%,但是在本地(数据库所在主机)连接数据库时,因为上述规则的存在,MySQL 会认为你是用匿名账户在登录。
my_account 跟匿名账户的密码是不同的,因此密码校验不通过,拒绝访问。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是怎样处理MySQL数据库拒绝访问的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MySQL和phpMyAdmin是强大的数据库管理工具。1)MySQL用于创建数据库和表、执行DML和SQL查询。2)phpMyAdmin提供直观界面进行数据库管理、表结构管理、数据操作和用户权限管理。

Oracle不仅是数据库公司,还是云计算和ERP系统的领导者。1.Oracle提供从数据库到云服务和ERP系统的全面解决方案。2.OracleCloud挑战AWS和Azure,提供IaaS、PaaS和SaaS服务。3.Oracle的ERP系统如E-BusinessSuite和FusionApplications帮助企业优化运营。

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

MySQL和MariaDB的主要区别在于性能、功能和许可证:1.MySQL由Oracle开发,MariaDB是其分支。2.MariaDB在高负载环境中性能可能更好。3.MariaDB提供了更多的存储引擎和功能。4.MySQL采用双重许可证,MariaDB完全开源。选择时应考虑现有基础设施、性能需求、功能需求和许可证成本。

SQL是一种用于管理关系数据库的标准语言,而MySQL是一个使用SQL的数据库管理系统。SQL定义了与数据库交互的方式,包括CRUD操作,而MySQL实现了SQL标准并提供了额外的功能,如存储过程和触发器。

MySQL和phpMyAdmin可以通过以下步骤进行有效管理:1.创建和删除数据库:在phpMyAdmin中点击几下即可完成。2.管理表:可以创建表、修改结构、添加索引。3.数据操作:支持插入、更新、删除数据和执行SQL查询。4.导入导出数据:支持SQL、CSV、XML等格式。5.优化和监控:使用OPTIMIZETABLE命令优化表,并利用查询分析器和监控工具解决性能问题。

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。 Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显着提升其性能。

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,删除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段时,需指定位置以优化查询性能和数据结构;删除字段前需确认操作不可逆;使用在线DDL、备份数据、测试环境和低负载时间段修改表结构是性能优化和最佳实践。
