在MariaDB 10.5中禁用root无密码登录
解决新版本MariaDB禁用root无密码登录的问题
我之前也碰到过一模一样的问题——新版本MariaDB对mysql.user视图的结构和权限做了严格限制,原来直接把认证插件设为空的方法已经行不通了,因为mysql.user现在是视图而非物理表,直接操作会触发引用权限错误。下面给你两个官方推荐的可行方案:
方案一:设置密码+mysql_native_password认证(最通用的安全方式)
这是最直接禁用无密码登录的方法,给root设置强密码并使用标准密码认证:
- 先无密码登录到MariaDB(如果你现在还能登录的话):
mysql -u root - 执行ALTER USER语句设置密码和认证插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的高强度密码';注意:如果你的root账号允许远程访问(比如
'root'@'%'),要替换对应的主机部分,确保所有root账号都配置了密码。 - 刷新权限使配置生效:
FLUSH PRIVILEGES;
之后root就必须输入密码才能登录,彻底禁用无密码访问。
方案二:使用unix_socket认证(本地安全登录,无需密码但限制登录方式)
如果你的场景是服务器本地管理,不想输入密码但又要避免无密码漏洞,可以用unix_socket插件——只有系统root用户(或sudo权限用户)才能通过sudo mysql登录MariaDB的root账号,远程无法无密码访问:
- 登录MariaDB后执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH unix_socket; - 刷新权限:
FLUSH PRIVILEGES;
这种方式既满足本地管理的便捷性,又杜绝了远程无密码登录的风险。
为什么原来的方法失效了?
新版本MariaDB不再允许将认证插件设为空字符串,一是因为mysql.user从物理表改成了视图,直接修改视图字段会触发引用错误;二是官方出于安全考虑,限制了这种不安全的配置,强制使用官方支持的认证插件(比如mysql_native_password、unix_socket、caching_sha2_password等)。
内容的提问来源于stack exchange,提问作者guillaumearnx
相关产品推荐
相关产品推荐

