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

时间:2020-03-03 03:44:10

标签: mysql laravel ubuntu

我正在创建一个Laravel App,并在全新安装的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安装。

2 个答案:

答案 0 :(得分:0)

尝试以下操作:

  1. USE mysql;

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

  3. REPAIR TABLE db;

然后重新启动MySQL服务器。

答案 1 :(得分:0)

我在与此问题无关的事情上浪费了 DAYS 天。答案是in the MySQL manual

<块引用>

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

因此您不能直接向 INFORMATION_SCHEMA 授予权限,您必须向您自己架构中的表授予权限,并且当您这样做时,这些表将开始显示在 INFORMATION_SCHEMA 查询中。

很遗憾,因为我希望有一个用户能够看到 INFORMATION_SCHEMA,但不能看到实际表格的内容,而且似乎没有办法做到这一点。