![Mysql:拒绝向用户“root”@“dhcp-xxxx”执行 GRANT 命令。' 针对表 'testtable'](https://linux22.com/image/633522/Mysql%EF%BC%9A%E6%8B%92%E7%BB%9D%E5%90%91%E7%94%A8%E6%88%B7%E2%80%9Croot%E2%80%9D%40%E2%80%9Cdhcp-xxxx%E2%80%9D%E6%89%A7%E8%A1%8C%20GRANT%20%E5%91%BD%E4%BB%A4%E3%80%82'%20%E9%92%88%E5%AF%B9%E8%A1%A8%20'testtable'.png)
我是 MySQL 管理职责的新手,正在尝试使用 MySQL Workbench 5.2.44 授予对表中有限数量列的 SELECT 权限,但没有成功:
GRANT SELECT (col1, col2, col3) ON mysqldb.testtable TO 'testuser'@'%'
我收到以下错误:
Error Code: 1142. GRANT command denied to user 'root'@'dhcp-x-x-x-x.companyname.com' for table 'testtable'
我已经在这里读过类似的帖子并做了以下测试:
1)显示“root”@“localhost”的授予;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD 'xxxxxxxx' WITH GRANT OPTION
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION
2)显示“root”@“%”的授予;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'xxxxxxxxx'
GRANT ALL PRIVILEGES ON `mysqldb`.* TO 'root'@'%'
3)显示当前用户的授权();
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'xxxxxxxxx'
GRANT ALL PRIVILEGES ON `mysqldb`.* TO 'root'@'%'
4)选择用户(),当前用户();
'[email protected]', 'root@%'
5)从mysql.user中选择主机、用户、select_priv、Create_user_priv;
localhost root Y Y
hostname.companyname.com root Y Y
::1 root Y Y
% root Y Y
我是否收到“GRANT 命令被拒绝”错误,因为即使我是 root,CURRENT_USER() 也被标识为“root”@“%”,并且 GRANT ALL PRIVILEGES“WITH GRANT OPTION”仅授予“root”@“localhost”,因此,“root”@“%”不被评估为与“root”@“localhost”等同?(我正在通过 MySQL WorkBench 连接到主机)
有没有办法解决这个问题而不使用--skip-grant-tables选项更改root密码?
答案1
首先,您需要在本地连接到 mysql,如上所述。尝试按照建议对 'root'@'%' 执行 GRANT,但是如果时间紧迫,一种快速完成此操作的肮脏方法(是的,遗憾的是,我不得不这样做)是专门向完全限定名称 'root'@'dhcp-123.123.123.123.companyname.com' 授予权限。
答案2
我是否收到了‘GRANT 命令被拒绝’错误,因为即使我是 root,CURRENT_USER() 也被标识为‘root’@‘%’,并且 GRANT ALL PRIVILEGES‘WITH GRANT OPTION’仅授予‘root’@‘localhost’,因此‘root’@‘%’不被评估为与‘root’@‘localhost’等同?
是的,你说得对。摘自mysql 文档
要使用 GRANT,您必须具有 GRANT OPTION 权限,并且您必须具有您授予的权限。
WITH GRANT OPTION 子句使用户能够将自己在指定权限级别拥有的任何权限授予其他用户。您应该谨慎授予谁 GRANT OPTION 权限,因为具有不同权限的两个用户可能会合并权限!
解决方案是mysql
从本地主机连接root
用户并更改权限root@%
。