“错误(1142):在尝试限制对列的访问时,SHOW命令被拒绝给用户...”

时间:2018-03-20 16:52:30

标签: mysql permission-denied user-permissions heidisql

我运行了以下查询来创建一个用户,该用户对可以在某个表中查看/编辑的列进行限制。该表具有其他表格的外键,我无法访问。我希望用户能够在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';

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

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

并且在数据&#39;

下根本看不到任何数据

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

'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'@'%'

如果我运行(但仍然无法查看任何数据),我会看到表格中的列:

SHOW COLUMNS FROM table1;

有谁知道为什么这个用户没有查看table1中的数据?

1 个答案:

答案 0 :(得分:0)

我设法找到了解决方案。

首先我需要向用户提供“GRANT SHOW VIEW”,以便他们可以查看表格中的数据。

接下来,我更改了我的查询,以便为所有列授予SELECT权限,并为所有列授予UPDATE权限,除了我想以只读方式保留给用户的列。

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

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';