无法将MySQL用户授予访问information_schema数据库的权限。

5

我正在创建一个Laravel应用程序,并在全新安装的Ubuntu 19.10.03上的生产模式下测试它。 安装了全新的LAMP(PHP 7.3,MySQL 8.0.19-0)。

我可以创建一个新的数据库和一个具有对数据库完全访问权限的新用户,但是Laravel要求该用户还必须从“information_schema”数据库获得SELECT选项。 我使用的过程如下:

$ sudo mysql

mysql> CREATE DATABASE IF NOT EXISTS `my-laravel-database`;
mysql> CREATE USER IF NOT EXISTS 'laravelUser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'myPass';
mysql> GRANT ALL PRIVILEGES ON `my-laravel-database`.* TO 'laravelUser'@'localhost' WITH GRANT OPTION;
mysql> GRANT SELECT ON `information_schema`.* TO 'laravelUser'@'localhost';

最后一个命令总是返回。
ERROR 1044 (4200): Access denied for user 'root'@'localhost' to database 'information_schema'

我尝试运行mysql_secure_installation命令来设置root密码,但没有起作用。我可以使用root用户运行应用程序,但我不想在生产环境中这样做。

我还尝试过只安装了LAMP服务的Ubuntu的全新安装。


你能检查一下你的 .env 文件吗?从错误信息来看,似乎你的 .env 文件中 DB_USERNAME 的值被设置成了 root。如果你已经修改过这个值但仍然出现这个错误,尝试在控制台或终端使用 php artisan cache:clear 命令清理缓存,或者在路由文件中使用 Artisan::call('cache:clear'); - Rian Zaman
1
我是在Ubuntu命令提示符中手动执行此操作,而不是通过Laravel进行操作。 - Ron Butcher
2个回答

4
我曾经在与此问题相关的问题上浪费了数天时间。答案在MySQL手册中:信息模式

对于大多数INFORMATION_SCHEMA表,每个MySQL用户都有访问权限,但只能看到与该用户具有适当访问权限的对象相对应的表中的行。

所以您无法直接授予权限给INFORMATION_SCHEMA,您必须授予权限给自己模式中的表,随着您这样做,这些表将开始显示在INFORMATION_SCHEMA查询中。
不幸的是,因为我希望拥有一个能够查看INFORMATION_SCHEMA但不能查看实际表内容的用户,但似乎没有办法做到这一点。

0

请尝试以下操作:

  1. USE mysql;

  2. ANALYZE TABLE db;   如果表已损坏,请运行以下命令:

  3. REPAIR TABLE db;

然后重新启动MySQL服务器。


当我执行analyze table db时,状态显示为ok。如果我尝试进行修复,我会收到一个错误消息The storage engine for the table doesn't support repair - Ron Butcher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接