在MySQL中远程root登录后,给一个用户授予权限

3

我有这个:

mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| root@%         |
+----------------+
1 row in set (0.00 sec)

mysql> SELECT USER();
+------------------+
| USER()           |
+------------------+
| root@CQ2404LA-PC |
+------------------+
1 row in set (0.00 sec)

mysql>
mysql> GRANT ALL PRIVILEGES ON `Company`.* TO 'TheUser'@'%' IDENTIFIED BY PASS
WORD '*3814FFAFF303C7DBB5511684314B57577D754FF9';
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'Company'

用户'root'@'%'被拒绝访问数据库'Company'

现在,我正在审查我所拥有的root权限:

mysql> show grants for 'root'@'localhost';
+-------------------------------------------------------------------------------
---------------------------------------------------------+
| Grants for root@localhost
                                                         |
+-------------------------------------------------------------------------------
---------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*158
FB31F24156B52B2408974EF221C5100001544' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION
                                                         |
+-------------------------------------------------------------------------------
---------------------------------------------------------+
2 rows in set (0.00 sec)

之前,我进行了本地测试,结果良好!

现在需要远程特权:

mysql> show grants for 'root'@'%';
+-------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------------------------------------------------------------+
| Grants for root@%



                                                                           |
+-------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS,
 FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES,
 LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW
VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER ON *.* TO 'root'@'%' IDENTIFIED
 BY PASSWORD '*158FB31F24156B52B2408974EF221C5100001544' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'%' WITH GRANT OPTION

不起作用!!! 我认为它必须起作用,因为:"ON *.* TO 'root'@'%'"

寻找区别: 'root'@'%'没有CREATE TABLESPACE、EVENT和TRIGGER

mysql> SELECT Host,     Event_priv,     Trigger_priv,   Create_tablespace_priv,
authentication_string   FROM mysql.user WHERE USER = "root";
+-----------+------------+--------------+------------------------+--------------
---------+
| Host      | Event_priv | Trigger_priv | Create_tablespace_priv | authenticatio
n_string |
+-----------+------------+--------------+------------------------+--------------
---------+
| localhost | Y          | Y            | Y                      |
         |
| %         | N          | N            | N                      | NULL
         |
+-----------+------------+--------------+------------------------+--------------
---------+
2 rows in set (0.01 sec)

mysql>

但是,我认为这并不是问题的根源...

也许解决方案是使用:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%',但我认为“所有权限”不仅仅代表“一定数量的权限”。


正如您所看到的,用户root@%具有授予权限给其他用户,但是目前无法使用。ON *.* TO 'root'@'%' ... WITH GRANT OPTION - user2730587
1个回答

1

要使用GRANT,您必须拥有GRANT OPTION特权,并且您必须拥有正在授予的特权。

——http://dev.mysql.com/doc/refman/5.6/en/grant.html

如果您没有“所有特权”,则无法授予“所有特权”。

修复root@%用户缺失的特权,问题将得到解决,尽管您真的应该了解每个特权的作用,并仅向每个用户授予适当的特权。


谢谢,但您可以看到---show grants for 'root'@'%';---带有GRANT OPTION。 只有与---show grants for 'root'@'localhost';---不同之处是根据我的问题具有四个权限(Event_priv、Trigger_priv、Create_tablespace_priv、authentication_string)... - user2730587
根据参考文献:GRANT语句授予MySQL用户帐户权限。GRANT还用于指定其他帐户特征,例如使用安全连接和对服务器资源的访问限制。要使用GRANT,您必须具有GRANT OPTION特权,并且必须具有您正在授予的特权。'root'@'%'对MySQL上所有(*.*)数据库具有权限。 - user2730587
不,它没有。你自己说过,'root'@'%'没有CREATE TABLESPACEEVENTTRIGGER,这些都是ALL PRIVILEGES的一部分。一个没有所有权限的账户...不能GRANT ALL PRIVILEGESGRANT OPTION只允许你给予你自己拥有的东西:"你必须拥有你正在授予的权限"。 - Michael - sqlbot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接