mysql 如何授予某个用户reload权限

创了一个在aware_db库下只有select权限的用户,现在想用这个用户对aware_db下的device_table表做flush但提示需要reload权限,

mysql> flush table aware_db.device_table;
ERROR 1227 (42000): Access denied; you need the RELOAD privilege for this operation
切换到root用户授予该用户reload权限却失败了求大神帮忙 谢啦!

mysql> grant RELOAD on aware_db.* to yikuaiwu@'%'identified by 'yikuaiwu';
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

MySQL数据库中的表与其他任何关系表没有区别,都可以通过典型的SQL命令修改其结构和数据。可以使用GRANT和REVOKE命令。通过这些命令,可以创建和禁用用户,可以在线授予和撤回用户访问权限。在5.0版本中增加了两个新命令:CREATE USER和DROP USER。从而能更容易地增加新用户、删除和重命名用户,还增加了第三个命令RENAME USER用于重命名现有的用户。

使用CREATE USER命令创建用户
CREATE USER用于创建新的MySQL账户。要使用CREATE USER语句,您必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。对于每个账户,CREATE USER会在没有权限的mysql.user表中创建一条新记录。如果账户已经存在,则出现错误。使用自选的IDENTIFIED BY子句,'可以为账户设置一个密码。user和密码的设置方法与GRANT语句一样。其命令的原型如下:

CREATE USER user [IDENTIFIED BY [PASSWORD 'PASSWORD'] [,user [IDENTIFIED BY [PASSWORD'PASSWORD']]……

create user temp identified by '123456';
使用DROP USER命令删除用户
如果存在一个或是多个账户被闲置,应当考虑将其删除,确保不会用于可能的违法活动。利用DROP USER命令就能很容易地从权限表中删除用户的所有信息,即来自所有授权表的账户权限记录。DROP USER命令原型如下:

DROP USER user [,user] ……

ps"DROP USER不能自动关闭任何打开的用户对话;而且,如果用户有打开的对话,此时取消用户,则命令不会生效,直到用户对话被关闭后才生效。一旦对话被关闭,用户也被取消,此用户再次试图登录时将会失败。

使用RENAME USER命令重命名用户
RENAMEUSER语句用于对原有MySQL账户进行重命名。RENAMEUSER语句的命令原型如下:

RENAME USER old_user TO new_user [,old_user TO new_user] ……

ps:如果旧账户不存在或者新账户已存在,则会出现错误。

回到顶部
权限管理
GRANT和REVOKE命令
GRANT和REVOKE命令用来管理访问权限,也可以用来创建和删除用户,但在MySQL5.0.2中可以利用CREATE USER和DROP USER命令更容易地实现这些任务。GRANT和REVOKE命令对于谁可以操作服务器及其内容的各个方面提供了多程度的控制,从谁可以关闭服务器,到谁可以修改特定表字段中的信息都能控制。





如果授权表拥有含有mixed-case数据库或表名称的权限记录,并且lower_case_table_names系统变量已设置,则不能使用REVOKE撤销权限,必须直接操纵授权表。(当lower_case_table_names已设置时,GRANT将不会创建此类记录,但是此类记录可能已经在设置变量之前被创建了。)

授予的权限可以分为多个层级:

全局层级适用于一个给定服务器中的所有数据库,这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。
数据库层级适用于一个给定数据库中的所有目标,这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name .*和REVOKE ALL ON db_name .*只授予和撤销数据库权限。
表层级适用于一个给定表中的所有列,这些权限存储在mysql.tables_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。
列层级适用于一个给定表中的单一列,这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。
子程序层级,CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序,这些权限可以被授予为全局层级和数据库层级;而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。

grant all on *.* to user identified by '123456' with grant option;
--授予用户名为user、密码为123456的用户使用所有数据库的所有权限,并允许他向其他人授予这些权限。
revoke all privileges,grant from user;
grant usage on books.* to user identified by '123456';
--创建一个没有任何权限的常规用户
grant select,insert,update,delete,index,alter,create,drop on books.* to user;
--为用户user授予适当的权限
revoke alter,create,drop on books.* from user;
--减少权限
revoke all on books.* from user;
--撤销所有的权限

p
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-01
0 reload 是 administrative 级的权限,即 server administration;这类权限包括:
CREATE USER, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, SUPER

1 这类权限的授权不是针对某个数据库的,因此须使用on *.* 来进行:

grant reload on *.* to 'test'@'localhost';本回答被提问者采纳
第2个回答  2020-11-17
mysql 如何授予某个用户reload权限?0 reload 是 administrative 级的权限,即 server administration;这类权限包括:
CREATE USER, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, SUPER
1 这类权限的授权不是针对某个数据库的,因此须使用on *.* 来进行:
grant reload on *.* to 'test'@'localhost';。创了一个在aware_db库下只有select权限的用户,现在想用这个用户对aware_db下的device_table表做flush但提示需要reload权限,

mysql> flush table aware_db.device_table;
ERROR 1227 (42000): Access denied; you need the RELOAD privilege for this operation
切换到root用户授予该用户reload权限却失败了求大神帮忙 谢啦!

mysql> grant RELOAD on aware_db.* to yikuaiwu@'%'identified by 'yikuaiwu';
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES