MariaDB 安装时没有密码提示

Posted

技术标签:

【中文标题】MariaDB 安装时没有密码提示【英文标题】:MariaDB installed without password prompt 【发布时间】:2015-08-29 05:24:20 【问题描述】:

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

【问题讨论】:

这不是安装的问题。这些服务器总是创建没有密码的root 帐户。您必须按照记录在内部对其进行更改。关于工作台或类似故障:不管是什么原因,但问题将在您为帐户设置密码的那一刻得到解决,无论如何您都必须这样做。 @arkascha:根据本手册,mariadb 在安装时会询问root密码:tecadmin.net/install-mariadb-10-on-ubuntu 我对 Ubuntu 了解不多,我更喜欢其他发行版,所以我不能说任何具体的事情。当然这样的事情是可能的,虽然它可能是有道理的,但我从未见过它。无论如何:那不是你的问题,是吗?您的问题是您的 root 帐户显然没有设置密码。你检查过内部mysql 表吗?如果是这样,那么只需设置一个密码就可以了。 我用三种不同的方式设置密码:使用set passwordupdate user 命令,然后在mysql 中使用flush privileges。使用mysqladmin 命令。使用mysql_secure_installation。但他们都没有解决这个问题。我仍然可以在没有密码的情况下从命令行连接到 mysql,但是 mysql-workbench 无法连接。 【参考方案1】:

Starting with MariaDB 10.4 root@localhost 帐户的创建能够使用两个身份验证插件:

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

这就是您无需密码即可登录全新安装的原因。

然后another quote:

当插件列为空时,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

【讨论】:

请在你的回答中添加一些解释! Mysql 尝试使用插件而不是密码来验证 root。您只需要禁用 root 的插件使用。 这个建议救了我 - 非常感谢。我不敢相信官方文档或任何其他描述如何重置 root 密码的指南中都没有。 在 Ubuntu 16.04 上,我使用 Aashish 给出的以下代码出现“SQL 语法错误”:>update user set plugin='' where User='root';就地,我用它来覆盖身份验证方法:> update user set plugin="mysql_native_password"; 解释可以找到here【参考方案2】:
sudo mysql -u root

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

这需要跟以下命令

# mysql_secure_installation

【讨论】:

如果你只是在开发环境中涉猎,你需要配置mysql_secure_installation吗?【参考方案3】:

如果从 localhost 访问,root 用户通常可以进行无密码访问,我建议不要使用此设置。

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

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

这样你的安全性更高。

如果您确实需要从工作台等工具以 root 身份连接,您可以配置这些工具以创建 ssh 隧道并以 localhost 身份连接到数据库。

【讨论】:

【参考方案4】:

正如@Pedru 所注意到的,“用户'root'@'localhost' 的访问被拒绝”消息是由于Debian and Ubuntu enable the UNIX_SOCKET Authentication Plugin plugin by default 允许无密码登录(另见Authentication Plugin - Unix Socket)。这不是安装问题。

这意味着如果你在 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

【讨论】:

【参考方案5】:

如果你想切换到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/

【讨论】:

ALTER USER 语句是在 MariaDB 10.2.0 中引入的。【参考方案6】:

对于大于等于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)]> 

【讨论】:

以上是关于MariaDB 安装时没有密码提示的主要内容,如果未能解决你的问题,请参考以下文章

为什么我 debian8 安装 MariaDB,没有提示输入 root 的密码

MariaDB 没有在 Ubuntu 15.04 上检查密码

centos 7 mariadb安装

centos 7 mariadb安装

mariadb

Linux安装MariaDB和简单配置