MariaDB 在没有密码提示的情况下安装



我已经使用 Ubuntu 软件中心或在命令提示符下(apt-get install maraidb-server)从 Ubuntu 15.04 存储库安装了 mariadb,但没有要求 root 用户输入密码。现在我可以在没有密码的情况下在命令行上连接到 mysql,但是使用 Mysql-Workbench 或 python mysqldb 库连接失败,并显示"用户'root'@'localhost'访问被拒绝"消息

MariaDB 10.4开始,创建root@localhost帐户,能够使用两个身份验证插件:

  • 首先,它配置为尝试使用 unix_socket 身份验证插件。这允许root@localhost用户在没有密码的情况下通过套接字系统变量定义的本地 Unix 套接字文件登录,只要尝试从操作系统root用户帐户拥有的进程登录。
  • 其次,如果使用unix_socket身份验证插件进行身份验证失败,则会将其配置为尝试使用 mysql_native_password 身份验证插件。但是,最初设置的密码无效,因此为了以这种方式进行身份验证,必须使用 SET PASSWORD 设置密码。

这就是为什么您不需要密码即可在全新安装中登录的原因。

但随后又引用了一句话:

当插件列为空时,MariaDB 默认使用 mysql_native_passwordmysql_old_password插件对帐户进行身份验证。它根据"密码"列的值中使用的哈希来决定哪个。当没有设置密码或使用 4.1 密码哈希(长度为 41 个字符)时,MariaDB 使用 mysql_native_password 插件。mysql_old_password插件与 4.1 之前的密码哈希一起使用(长度为 16 个字符)。

因此,设置plugin = ''将强制它使用基于密码的身份验证。确保在此之前设置密码。

sudo mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] q
sudo mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] q

这需要遵循以下命令

# mysql_secure_installation

如果从本地主机访问,root 通常具有无密码访问权限,我建议不要使用此设置。

我还建议您创建一个权限较少的用户,并允许该用户远程登录。

create user my_admin identified by '12345';
create database my_database;
grant all on my_database.* to my_admin;

这样你就可以有更多的安全性。

如果确实需要从工作台等工具以 root 身份进行连接,则可以配置这些工具以创建 ssh 隧道并以本地主机身份连接到数据库。

正如@Pedru注意到的,"用户'root'@'localhost'的访问被拒绝"消息是由于Debian和Ubuntu默认启用UNIX_SOCKET身份验证插件插件,允许无密码登录(另请参阅身份验证插件 - Unix 套接字)。这不是安装问题。

这意味着如果你在 Linux Shell 中键入 mysql -u root -proot实际上是 Linux 根目录(或链接到它,我不知道它实际上是如何工作的)。因此,如果您使用其他帐户登录 Linux,您将收到一个错误: ERROR 1698 (28000): Access denied for user 'root'@'localhost' .如果尚未定义密码,最好键入 sudo mysql -u root -psudo mysql -u root

如果你想切换到mysql_native_password身份验证插件,那么你可以使用

ALTER USER root@localhost IDENTIFIED VIA mysql_native_password;
SET PASSWORD = PASSWORD('new_password');

有关更多信息,请参阅https://mariadb.com/kb/en/authentication-plugin-unix-socket/

对于大于或等于 10.2.0 的 MariaDB 版本,user3054067 的响应是正确的。

对于低于 10.2.0 的 MariaDB 版本,您可以执行以下操作:

me$ sudo su -
root$ mysql -u root
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Query OK, 0 rows affected, 1 warning (0.00 sec)
MariaDB [(none)]> UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

在另一个终端,

me$ mysql -u root -pnew_password
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 83
Server version: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
MariaDB [(none)]> 

相关内容

  • 没有找到相关文章

最新更新