【问题标题】:Connect to mysql server without sudo不使用 sudo 连接到 mysql 服务器
【发布时间】:2016-09-11 10:04:15
【问题描述】:

命令:

mysql -u root -p

给出错误:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

但运行 sudo 权限,工作:

sudo mysql -u root -p

是否可以摆脱 sudo 要求,因为它阻止我在 intellij 中打开数据库?我在这个问题的答案Connect to local MySQL server without sudo中尝试了以下内容:

sudo chmod -R 755 /var/lib/mysql/

这没有帮助。上面的问题抛出了不同的错误

【问题讨论】:

  • 我已经提到它不起作用

标签: mysql sudo


【解决方案1】:

在您回答您引用的问题的评论中,它显示

好的,试着分析下路径中的所有目录 socket 文件,他们也需要 o+rx 和 sock 文件(它不是 使它可以被其他人修改的好主意)。

你也可以尝试删除mysql.sock,然后重启mysqld, 文件应该由具有适当权限的守护进程创建。

这似乎适用于this question(你说你看过的那个)所以它也可能适用于你

【讨论】:

  • 我该怎么做?我提到的问题引发了不同的错误
  • 没有理由拒绝投票! :查看 /etc/mysql/my.cnf 文件并禁用此:#plugin-load-add = auth_socket.so 并重新启动数据库,或阅读如何在没有密码的情况下启动 mysql liberiangeek.net/2014/10/reset-root-password-mariadb-centos-7
【解决方案2】:

错误信息:

“ERROR 1698 (28000): Access denied for user 'root'@'localhost'”

表示服务器不允许该用户连接,而不是mysql无法访问套接字。

试试这个来解决问题:

登录您的数据库

sudo mysql -u root -p

然后进行这些修改:

MariaDB []>use mysql;
MariaDB [mysql]>update user set plugin=' ' where User='root';
MariaDB [mysql]>flush privileges;
MariaDB [mysql]>exit

尝试不使用 sudo 再次登录

【讨论】:

  • 我试过了,现在我什至无法使用 sudo 登录。可能需要重新安装mysql :(
  • 恭喜你的回答不仅没能解决问题,反而让问题变得更糟。
【解决方案3】:

只有root用户需要sudo才能登录mysql。我通过创建一个新用户并授予对所需数据库的访问权限来解决此问题:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'localhost';

现在newuser 无需 sudo 即可登录:

mysql -u newuser -p

【讨论】:

  • 对于任何想知道密码可能是什么的人,它是IDENTIFIED BY 之后的字符串,在这种情况下只是'密码'
  • 请注意:连接时不要在-p 选项后添加空格。例如:mysql -u newuser -ppassword(没有空格!)
【解决方案4】:

首先使用 sudo 登录你的 mysql。

然后使用此代码将 root 用户的“plugin”列值从“unix_socket”或“auth_socket”更改为“mysql_native_password”。

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin IN ('unix_socket', 'auth_socket');

FLUSH PRIVILEGES;

最后重启mysql服务。就是这样。

如果您想了解更多信息,请查看this 链接

更新:

在新版本的 mysql 或 mariadb 中你可以使用:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password USING PASSWORD('your-password');
FLUSH PRIVILEGES;

【讨论】:

  • 插件值在我的例子中是 'auth_socket'。
  • sudo service mysql restart 重新启动。
  • 这是所有列出的答案中唯一对我有用的一个(MariaDB v15.1)。
【解决方案5】:

您需要更改算法。为我工作,

mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
mysql > FLUSH PRIVILEGES;

【讨论】:

  • 它也帮助了我。突然,重新启动后,我开始收到用户 root@localhost 的访问被拒绝。这个解决方案帮助我连接 mysql
  • 当我以 root 身份登录时,我只能以 root 身份登录 mysql,这对我有用。一旦我为 root 分配了一个空白密码,我就可以退出,使用空白密码重新登录,然后使用相同的命令来使用我想要的密码。
【解决方案6】:

您可以使用以下查询:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

这个查询就够了。

【讨论】:

    【解决方案7】:

    您可以使用相同的 ROOT 用户或 NEW_USER 并删除 SUDO 权限。下面的示例显示了如何使用 ROOT 删除连接,而不使用 SUDO。

    使用 SUDO 连接到 MY-SQL

    sudo mysql -u root
    

    从用户表中删除当前根用户

    DROP USER 'root'@'localhost';
    

    创建一个新的ROOT用户(如果需要,你可以创建一个不同的用户)

    CREATE USER 'root'@'%' IDENTIFIED BY '';
    

    授予新用户(ROOT)权限

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    

    刷新权限,以便立即重新加载授予表。 (Why do we need to flush privileges?)

    FLUSH PRIVILEGES;
    

    现在一切都很好。以防万一,请检查是否创建了新的 root 用户。

    SELECT User,Host FROM mysql.user;
    
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | root             | %         |
    | debian-sys-maint | localhost |
    | mysql.session    | localhost |
    | mysql.sys        | localhost |
    +------------------+-----------+
    4 rows in set (0.00 sec)
    

    退出mysql。 (按 CTRL + Z)。不使用 SUDO 连接到 MySQL

    mysql -u root
    

    希望这会有所帮助!

    【讨论】:

    • 为我工作。我所做的唯一更改是将 '%' 替换为 'localhost'
    【解决方案8】:

    我已经使用以下命令解决了这个问题。

    CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost';
    FLUSH PRIVILEGES;
    

    这里, username = 你喜欢的任何用户名。

    password = 你喜欢的任何密码。

    【讨论】:

      【解决方案9】:

      这个answer 需要稍微适应mariaDB 而不是mysql。

      首次使用 sudo 以 root 身份登录:

      $ sudo mysql -uroot
      

      然后更改 mariadb root 用户:

      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password USING PASSWORD('mypassword');
      FLUSH PRIVILEGES;
      

      从现在开始不再需要 sudo:

      $ mysql -uroot -p
      

      使用的版本: mysql Ver 15.1 Distrib 10.4.13-MariaDB,用于 osx10.15 (x86_64) 使用 readline 5.1

      【讨论】:

        【解决方案10】:

        使用 sudo 登录 mysql: sudo mysql -u root -p

        之后删除当前的 root@localhost 帐户:

        ~ MariaDB [(none)]> DROP USER 'root'@'localhost';
        ~ MariaDB [(none)]> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
        ~ MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
        ~ MariaDB [(none)]> FLUSH PRIVILEGES;
        

        【讨论】:

          猜你喜欢
          • 2014-08-20
          • 2022-12-06
          • 2016-04-27
          • 2011-12-13
          • 1970-01-01
          • 2015-09-19
          • 2018-12-27
          • 2020-09-13
          • 2021-12-17
          相关资源
          最近更新 更多