我是MySQLpipe理职责的新手,并试图使用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-xxxx.companyname.com' for table 'testtable'
我在这里经历了类似的post,并做了以下testing:
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)显示CURRENT_USER();
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'xxxxxxxxx' GRANT ALL PRIVILEGES ON `mysqldb`.* TO 'root'@'%'
4)SELECT USER(),CURRENT_USER();
'[email protected]', 'root@%'
5)从mysql.user中selecthost,user,select_priv,Create_user_priv;
localhost root YY hostname.companyname.com root YY ::1 root YY % root YY
我得到'GRANT命令被拒绝'的错误,因为即使我是root,CURRENT_USER()被标识为'root'@'%',并且授予所有特权'授予选项'只给予'root'@'localhost'因此,'root'@'%'不等于'root'@'localhost'? (我通过MySQL WorkBench连接到主机)
有没有办法解决这个问题,而无需使用–skip-grant-tables选项来更改root密码?
我得到'GRANT命令被拒绝'的错误,因为即使我是root,CURRENT_USER()被标识为'root'@'%',并且授予所有特权'授予选项'只给予'root'@'localhost'因此,'root'@'%'不等于'root'@'localhost'?
是的,你是对的。 从MySQL文档摘录
要使用GRANT,您必须具有GRANT OPTION权限,并且您必须拥有您授予的权限。
WITH GRANT OPTION子句给予用户在给定权限级别给予其他用户任何权限的能力。 您应该谨慎向谁授予GRANT OPTION权限,因为具有不同权限的两个用户可能能够组合权限!
解决办法是将root用户从本地主机连接到mysql ,并更改root@%的权限。
首先,你需要在本地连接到mysql,如上所述。 尝试按照build议做'root'@'%'的授权,如果时间是本质的,一个快速的肮脏的方式来完成这个(是的,可悲的是,我必须这样做)是专门授予完全限定名“root'@dhcp-123.123.123.123.companyname.com”。