MySQL C++ Connector及MySQL Workbench无法连接本地MariaDB问题
解决方案:MariaDB 10.6 连接错误1698及用户插件修改失败问题
问题根源
- 错误1698(Access denied):Debian/Ubuntu系(包括PopOS)的MariaDB默认root用户采用
unix_socket插件认证,仅允许通过sudo关联的系统用户登录,不支持密码认证方式,因此直接用密码连接(C++代码、Workbench)会被拒绝。 - UPDATE语句报错:MariaDB 10.4及以上版本中,
mysql.user是视图而非物理表,无法直接通过UPDATE语句修改用户属性,必须使用官方标准的用户管理语句。
解决步骤
方案一:创建新的密码认证用户(推荐)
- 通过unix_socket免密登录MariaDB:
sudo mariadb
- 创建采用
mysql_native_password插件的新用户(适配MySQL C++ Connector):
CREATE USER 'me'@'localhost' IDENTIFIED BY 'your_secure_password';
- 为新用户授权(根据业务需求调整权限范围,示例为全权限):
GRANT ALL PRIVILEGES ON *.* TO 'me'@'localhost' WITH GRANT OPTION;
- 刷新权限使设置生效:
FLUSH PRIVILEGES;
- 修改C++代码及Workbench的连接参数,使用新用户名
me和对应密码即可正常连接。
方案二:修改root用户的认证方式(不推荐,仅用于测试或特殊场景)
- 同样通过sudo登录MariaDB:
sudo mariadb
- 切换root用户为密码认证:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_root_password';
- 刷新权限:
FLUSH PRIVILEGES;
- 之后即可用root账号+密码连接MariaDB。
注意事项
- 连接字符串中
host需设为localhost,若使用127.0.0.1,需单独创建对应主机的用户条目(如'me'@'127.0.0.1')。 - 确保MySQL C++ Connector版本与MariaDB版本兼容(你安装的
libmysqlcppconn8-dev适配8.x协议,与MariaDB 10.6兼容)。
内容的提问来源于stack exchange,提问作者Dov
相关产品推荐
相关产品推荐

