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

Ron*_*her 5 mysql ubuntu laravel

我正在创建一个 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';
Run Code Online (Sandbox Code Playgroud)

最后一个命令总是返回

ERROR 1044 (4200): Access denied for user 'root'@'localhost' to database 'information_schema'
Run Code Online (Sandbox Code Playgroud)

我尝试运行mysql_secure_installation命令来设置 root 密码,但这没有帮助。我可以以 root 用户身份运行该应用程序,但我不想在生产中执行此操作。

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

Jul*_*ano 5

我在与这个问题无关的事情上浪费了几天时间。答案在 MySQL 手册中

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

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

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


use*_*937 0

请尝试以下操作:

  1. USE mysql;

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

  3. REPAIR TABLE db;

然后重新启动MySQL服务器。