root的mariadb密码和unix_socket身份验证

pow*_*ete 4 mysql authentication mariadb

我在Ubuntu 16.04上的MariaDB上有一个root用户.

默认情况下,root用户由unix_socket身份验证插件进行身份验证.

我可以通过设置将身份验证方法切换为密码方法

update mysql.user set plugin='' where user='root';
Run Code Online (Sandbox Code Playgroud)

这很好用.但......

是否有可能通过unix_socket(root shell)或密码(当它由localhost:3306连接时)验证root用户?

Col*_*inM 8

MariaDb/MySQL 认为 'localhost' 与 '127.0.0.1' 不同,因此您可以为 TCP 设置密码,而为 Unix 套接字设置密码,如下所示:

玛丽亚数据库:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'xxx' WITH GRANT OPTION;
INSTALL SONAME 'auth_socket';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)

MySQL/Percona:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'xxx' WITH GRANT OPTION;
INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED WITH auth_socket WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)


Jam*_*ude 8

是的 \xe2\x80\x94 从 MariaDB 10.4(2019 年 6 月发布*)开始,您可以使用OR关键字IDENTIFIED VIA来允许多种身份验证方法中的任意一种:

\n
ALTER USER `minecraft` \n    IDENTIFIED VIA unix_socket \n    OR mysql_native_password USING PASSWORD("Type me over TCP, or from other accts");\n
Run Code Online (Sandbox Code Playgroud)\n

https://mariadb.com/kb/en/pluggable-authentication-overview/#extended-sql-syntax

\n
\n

*尽管操作系统供应商可能进展缓慢,甚至完全拒绝提供更新,MariaDB 仍提供了一个官方存储库,至少为 Ubuntu 14.04、CentOS 和 RHEL 6、Debian 7 等旧发行版提供此版本的服务Fedora 28(以及每个版本的最新版本),但对于其中一些(例如 Fedora < 32),您可能必须手动修改 URL 中的版本。

\n

  • 我们的 MariaDB 10.6 不喜欢“CREATE OR ALTER ...”。但是将语句更改为 `ALTER USER `minecraft` IDENTIFIED VIA unix_socket OR mysql_native_password USING PASSWORD("s3cr3tpasswvrd");` 有效。 (2认同)

ele*_*nst 6

一种可靠而直接的方法是创建另一个超级用户,并在想要通过密码连接时使用它.

CREATE USER admin@localhost IDENTIFIED BY 'password';
GRANT ALL ON *.* TO admin@localhost WITH GRANT OPTION;
-- etc
Run Code Online (Sandbox Code Playgroud)