我正在研究SQL语言,我正在尝试在Linux Mint上使用MySQL来测试我的工作,但是我遇到了像ERROR 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)
我想保持这个问题整洁,现在“小”,所以它不会到处都是。我会补充一点,我试图像一些帖子所说的那样以root身份进入,但我没有密码。我从未在安装过程中为用户设置root用户密码。我尝试了用户密码和错误。试图寻找或重置它,显然我没有任何特权或权利。我试着修复它,你知道,另一个错误。 >:o
有人可以帮忙解决ERROR 1044的问题吗?有没有理由我遇到这么多问题?它是一个有缺陷的RDBMS还是与我的实际计算机及其处理方式有关的问题?是否有一个很好的解决方案来摆脱所有问题,只需使用RDBMS而不需要Some Assembly Required。
它是一个有缺陷的RDBMS ......?
这不是一个错误,这是一个功能!
(我不能告诉你我有多久没有讽刺的说法。)
您的授权显示您的phpmyadmin用户仅具有phpmyadmin数据库的权限。
权限USAGE ON *.*
意味着您可以连接到MySQL服务器,但这并不意味着您对该服务器上的任何数据库都拥有任何权限。
权限ALL PRIVILEGES ON
phpmyadmin.*
意味着您拥有phpmyadmin数据库的所有表的权限。您没有任何其他数据库的权限。所以,当你尝试USE preciousMetals;
时,它会立即拒绝该请求。
您无权访问某些特定资源的事实不是软件中的错误。
通过类比,如果您尝试使用cd <directory>
,如果您没有权限这样做,就像在Linux上一样。如果你这样做,你会 - 正确 - 得到一个错误。
$ cd secret_directory
-bash: cd: secret_directory: Permission denied
您需要授予phpmyadmin用户更多权限。你有权访问root
MySQL帐户吗?这通常是拥有所有数据库所有权限的权限,以及向其他MySQL用户授予权限的权限。
至于你的第二个问题,至少有一个其他SQL数据库产品根本不强制执行GRANT / REVOKE或特权:SQLite。只要您在Linux级别访问以打开数据库文件,就可以自由访问其中的所有表。没有实现访问权限系统。但SQLite并不是MySQL的替代品。不支持并发多用户访问,网络连接或您可能需要的许多其他功能。
对于MySQL,您可以在不强制执行密码或特权的模式下运行它。
/etc/my.cnf
)。[mysqld]
选项组下方的任何位置。
[mysqld]
skip_grant_tables
$ sudo service mysql restart
之后,您将不需要输入密码,也不会强制执行SQL权限。
这显然不是您将MySQL用于实时应用程序的方式,因为它会危及所有安全性。但是,如果您正在努力获取权限,而您只想在本地实例上学习SQL,请继续。