如何正确解决 mySQL 上的错误 1044?这里的其他答案不起作用

How to properly resolve ERROR 1044 on mySQL? Other answers here don't do the trick

我正在学习 SQL 语言,我正在尝试在 Linux Mint 上使用 MySQL 来测试我的工作,但是我遇到了错误 1044 之类的问题。我已经尝试过遵循此处的各种建议,但随后我遇到了不同的错误代码,然后在尝试解决新问题时我看到了另一个错误代码,在尝试解决其他新问题时我看到了另一个错误代码,然后重复恶心。所以我从头开始,希望我的特定问题能够得到解决。

我试过了

mysql> USE preciousMetals;
ERROR 1044 (42000): Access denied for user 'phpmyadmin'@'localhost' to database 'preciousMetals'

检查了这个

mysql> show grants;
+--------------------------------------------------------------------+
| Grants for phpmyadmin@localhost                                    |
+--------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost'                     |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost' |
+--------------------------------------------------------------------+
2 rows in set (0.00 sec)

我在提示符中输入这个命令

mysql> select user ();
+----------------------+
| user ()              |
+----------------------+
| phpmyadmin@localhost |
+----------------------+
1 row in set (0.00 sec)

然后这个

mysql> select current_user ();
+----------------------+
| current_user ()      |
+----------------------+
| phpmyadmin@localhost |
+----------------------+
1 row in set (0.00 sec)

我想让这个问题保持整洁 "small" 现在这样就不会到处都是。我要补充一点,我试图像一些帖子所说的那样以 root 身份进入,但我没有密码。在安装过程中,我从来没有为用户设置 root 密码。我尝试了用户密码和错误。试图寻找它或重置它,显然我没有任何特权或权利或其他东西。我试图解决这个问题,你知道的,另一个错误。 >:O

有人可以帮忙解决 ERROR 1044 吗?我遇到这么多问题是有原因的吗?它是有问题的 RDBMS 还是与我的实际计算机及其处理方式有关的问题?有没有一个很好的解决方案来解决所有问题,只使用 RDBMS 而无需 Some Assembly Required 东西。

Is it a buggy RDBMS ... ?

这不是错误,这是一个功能!

(我无法不讽刺地告诉你我等了多久才说出这句话。)

您的授权表明您的 phpmyadmin 用户仅对 phpmyadmin 数据库具有权限。

权限USAGE ON *.*意味着您可以连接到MySQL服务器,但这并不意味着您对该服务器上的任何数据库都具有任何权限。

权限ALL PRIVILEGES ONphpmyadmin.*表示您拥有phpmyadmin数据库所有表的权限。您对任何其他数据库都没有特权。因此,当您尝试 USE preciousMetals; 时,它会立即拒绝该请求。

您无权访问某些特定资源这一事实并不是软件中的错误。

打个比方,这就像在 Linux 上一样,如果您尝试 cd <directory> 如果您没有这样做的权限。如果你这样做,你会——正确地——得到一个错误。

$ cd secret_directory
-bash: cd: secret_directory: Permission denied

您需要授予 phpmyadmin 用户更大的权限。您可以访问 root MySQL 帐户吗?这通常是拥有所有数据库的所有权限的人,并且能够将权限授予其他 MySQL 用户。

关于你的第二个问题,至少还有一个 SQL 数据库产品根本不强制执行 GRANT/REVOKE 或特权:SQLite。只要您具有 Linux 级别的访问权限以打开数据库文件,您就可以自由访问其中的所有表。没有实施访问权限系统。但是 SQLite 并不完全是 MySQL 的替代品。不支持并发多用户访问、网络连接或您可能需要的许多其他功能。


对于 MySQL,您可以 运行 在不强制执行密码或权限的模式下使用它。

  1. 编辑 MySQL 选项文件(在 Linux 系统上通常 /etc/my.cnf)。
  2. 添加禁用强制执行的选项。这应该位于选项文件中 [mysqld] 选项组下方的任何位置。

    [mysqld]
    skip_grant_tables
    
  3. 重启mysqld进程。这是通过 shell 命令作为 Linux root 用户完成的:

    $ sudo service mysql restart
    

之后,您将不需要输入密码,也不会强制执行 SQL 权限。

这显然不是您在实时应用程序中使用 MySQL 的方式,因为它会危及所有安全性。但是,如果您在特权方面苦苦挣扎,而只想在本地实例上学习 SQL,请继续。