我使用最新的MariaDB docker映像创建了一个用户xyz,其凭据与根用户的凭据相同:

mysql> SELECT User, Host FROM mysql.user;
+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| root        | %         |
| xyz         | 127.0.0.1 |
| healthcheck | 127.0.0.1 |
| healthcheck | ::1       |
| xyz         | localhost |
| healthcheck | localhost |
| mariadb.sys | localhost |
| root        | localhost |
+-------------+-----------+

mysql> show grants for xyz@'127.0.0.1';
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for xyz@127.0.0.1                                                                                            |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `xyz`@`127.0.0.1` IDENTIFIED BY PASSWORD '*something'                     |
| GRANT ALL PRIVILEGES ON `somedatabase`.* TO `xyz`@`127.0.0.1`                                                           |
+-----------------------------------------------------------------------------------------------------------------------+

但是,我可以以根用户身份登录,但不能以xyz用户身份登录:

bash> mysql -uroot -h 127.0.0.1 -P3308 -p
Enter password: 
Welcome to the MySQL monitor.  Comm和s end with ; or \g.
Your MySQL connection id is 19
....

bash> mysql -uxyz -h 127.0.0.1 -P3308 -p 
Enter password: 
ERROR 1045 (28000): Access denied for user 'xyz'@'172.17.0.1' (using password: YES)

你知道可能会发生什么事吗?如何调查这一问题?

推荐答案

问题

与拨款相比的误差告诉你问题所在:

ERROR 1045 (28000): Access denied for user 'xyz'@'172.17.0.1' (using password: YES)
| xyz         | 127.0.0.1 |

容器从172.17.0.1(很可能是主机)连接您,但您的权限只允许从127.0.0.1连接.

最简单的解决方案将是允许用户xyz从与主机root具有相同%的任何地方连接,但这具有一些安全隐患.

如果您这样做,并且不希望从主机外部进行任何连接,请确保容器端口仅expose on the host machine,而不是外部.

这意味着,如果您使用如下命令运行容器:

docker run -p 3308:3308 mariadb:latest

你也在把它向外曝光.一定要这样做:

docker run -p 127.0.0.1:3308:3308 mariadb:latest

Mysql相关问答推荐

左联接重复问题

无法删除或更新父行:外键约束无法删除表

不分组寻呼

MySQL-如何检测时间戳中的一天

表列中的SQL SUM MENY值记录单个查询

在两个日期之间生成每个月的1行数据.

MySQL中的where语句会 destruct 全外连接.

使用mysql查询获取不关注user1的user3

多个 FULLTEXT 索引上的 MySQL SELECT.结果极其缓慢

将sql查询转换为sequelize

为什么这个查询需要超过 5 秒才能运行?

使用 DISTINCT 时无法从数据库中查询所有数据

MySQL过滤食谱上的多对多 - 成分表

mysql从另一个表中 Select 不相等的值

如何使用 C++ 连接 mySQL 数据库

If else on WHERE 子句

当您无法修复表时,如何修复 MySQL不正确的密钥文件错误?

Drupal 的默认密码加密方法是什么?

加快 mysql 转储和导入

在 MySQL 中存储 IPv6 地址