【问题标题】:SQL permissions behaving unexpectedlySQL 权限行为异常
【发布时间】:2020-08-30 10:59:36
【问题描述】:

最近我开始学习php和sql,因为我对前端有点了解,所以我想加强对后端系统的了解。我买了一个树莓派,并设置了一个简单的 LAMP 服务器,效果很好(ish)。我可以运行 php 表单,这是一个好的开始。

但是,我安装了 MariaDB v10.3.22,但遇到了很多麻烦。安装成功后,我去登录,并期望一个空白密码。那没用。

mysql -u root -p

我收到错误 ERROR 1698 (28000): Access denied for user 'root'@'localhost' 因为这是我尝试的全新安装:

mysql_secure_installation

无论如何,我最终发现输入sudo mysql -u root -p 可以让我进入,根本不需要密码。事实上,即使使用sudo 运行安全安装也能正常工作,这意味着我不需要输入正确的密码。在运行 sudo 时,我可以输入任何我想进入 MariaDB shell 和安全脚本的密码,而且它只适用于 root db 用户。为什么是这样?为什么 sudo 可以绕过所有这些,尤其是因为我在文档中没有看到 sudo 的任何用法。

我创建了一个具有完全权限的新用户,它工作正常,我不需要 sudo 并且密码确实有效。

对不起,如果这令人困惑,但这是我能解释的最好的,因为我也很困惑。

谢谢, 安格斯

【问题讨论】:

    标签: sql raspberry-pi mariadb sudo mariadb-10.3


    【解决方案1】:

    这可能是由于root 用户使用了 Unix Socket 身份验证插件。

    正如插件的documentation 所详述:

    unix_socket 身份验证插件允许用户在通过本地 Unix 套接字文件连接到 MariaDB 时使用操作系统凭据。

    unix_socket 身份验证插件通过使用SO_PEERCRED 套接字选项调用getsockopt 系统调用来工作,这允许它检索连接到套接字的进程的uid。然后它能够​​获取与该uid 关联的用户名。一旦有了用户名,它就会将连接用户验证为具有相同用户名的 MariaDB 帐户。​​

    假设您在 shell 会话中没有以root 身份登录,通过运行sudo mysql -u root -p 您以root 身份执行命令,这就是您没有绕过身份验证的原因,它只是使用套接字身份验证作为故意的。它不需要密码,因为 OS 用户与 MySQL 用户匹配。

    您可以通过以下操作检查root 是否使用 Unix Socket 身份验证:

    MariaDB [(none)]> SELECT User, Host, plugin FROM mysql.user;
    +------+-----------+-------------+
    | User | Host      | plugin      |
    +------+-----------+-------------+
    | root | localhost | unix_socket |
    +------+-----------+-------------+
    

    我还建议您查看 this 其他问题,该问题解决了 MySQL 上的相同情况。

    【讨论】:

    • 谢谢,这是有道理的。但是,这是否也会对“服务 mysql 启动/停止”等内容产生影响,因为当我输入此命令并且我不是 root 用户时,它会要求输入密码(我不知道)并且使用“sudo”无论我使用什么密码都可以正常工作。另外,如何更改根 MariaDB 帐户的根密码,这样我就不必每次都使用 sudo?
    • 不,它不会影响操作系统上的东西,比如service,只有 MariaDB 用户。您可以通过以下方式更改 root 密码:ALTER USER root@localhost IDENTIFIED VIA mysql_native_password;SET PASSWORD = PASSWORD('new-password'); 插件文档中有一个示例:mariadb.com/kb/en/authentication-plugin-unix-socket/…
    • 你也可以创建一个新用户而不是使用root:stackoverflow.com/a/37241990/7122251
    • 谢谢,但是当我在超级用户中运行 service mysql stop 时,我不需要输入任何密码,而没有它,我就是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2016-09-29
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多