“Error (1142): SHOW command denied to user…” when trying to restrict access to columns

“Error (1142): SHOW command denied to user…” when trying to restrict access to columns

我 运行 下面的查询创建一个用户,限制他们可以在某个 table 中的哪些列 view/edit。 table 有其他 table 的外键,我没有授予任何访问权限。我希望用户能够编辑 INSERT 下的列,并且只对 SELECT.

下的列具有只读访问权限
CREATE USER 'user'@'hostname';
GRANT SELECT (`Status`,`Number`,`Location`), INSERT (`Name`,`Address`,`Email Address`,_
`Home Number`,`Work Number`,`Mobile Number`,`Date Available`) ON `project1`.`table1`_
 TO  'user'@'hostname' IDENTIFIED BY 'password';

查询 运行s 并创建用户。我正在让用户使用 HeidiSQL 来编辑这个 table 中的数据。当我以用户身份登录时,正如预期的那样,唯一可见的 table 是 table1,但是当我单击 table 时,出现错误:

/* SQL Error (1142): SHOW command denied to user 'user'@'<IP address different to hostname IP address>' for table 'table1' */

并且在'Data'

下根本看不到任何数据

在 Stack Overflow 上提出了以下问题,但是 none 的建议解决方案对我有用:

'SHOW command denied to user' when setting up user permissions

如果我运行查询

SHOW GRANTS FOR CURRENT_USER;

我得到:

GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY PASSWORD '*<password different to one set originally>'
GRANT SELECT (Status,Number,Location), INSERT (Name,Address,Email Address,Home Number,Work Number,Mobile Number,Date Available) ON `project1`.`table1` TO 'user'@'%'

如果我 运行 我可以查看 table 中的列(但仍然无法查看任何数据):

SHOW COLUMNS FROM table1;

有谁知道为什么此用户无法查看 table1 中的数据?

我设法找到了解决方案。

我需要首​​先 'GRANT SHOW VIEW' 给用户,这样他们才能查看 table 中的数据。

接下来,我更改了我的查询,以便我 g运行 获得了对所有列的 SELECT 权限,并且 g运行 获得了对所有列的更新权限,除了我想将 Read-Only 留给用户。

以下是我 运行 成功运行的查询:

CREATE USER 'user'@'localhost';

GRANT SHOW VIEW ON `project1`.`table1` TO  'user'@'localhost' IDENTIFIED BY 'password';

GRANT SELECT (`Status`,`Number`,`Location`,`Name`,`Address`,`Email Address`,`Home Number`,_
`Work Number`,`Mobile Number`,`Date Available`), UPDATE (`Name`,`Address`,`Email Address`,_
`Home Number`,`Work Number`,`Mobile Number`,`Date Available`) ON `project1`.`table1` TO _
'user'@'localhost' IDENTIFIED BY 'password';