MySQL赋权与回收权限命令

本文介绍MySQL中如何使用REVOKE和GRANT命令来回收和授予用户的数据库权限,包括表的增删改查等操作权限,以及如何查看用户权限,并提供了一些关于权限的具体说明。

可先阅读:

回收权限命令:

--回收建表、改表、删表权限
REVOKE CREATE ON zplatdb.* FROM 'zplat_cen1';
REVOKE DROP ON zplatdb.* FROM 'zplat_cen1';
REVOKE ALTER ON zplatdb.* FROM 'zplat_cen1';

--回收表记录的增删改权限
REVOKE INSERT ON newythdb.* FROM 'zplat_cen1';
REVOKE UPDATE ON newythdb.* FROM 'zplat_cen1';
REVOKE DELETE ON newythdb.* FROM 'zplat_cen1';

查看权限:

SHOW GRANTS FOR 'zplat_cen1';

回收了建表、改表、删表后剩下的权限:

GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, INDEX, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `zplatdb`.* TO 'zplat_cen1'@'%'
  • on后面是库名.表名,如果某个库的全部表为zplatdb.*,如果是全部库的全部表为*.*
  • 如果全部权限,可以用all privileges

赋权只需要把revoke改为grant,from改为to即可:

grant all privileges on uacdb1.* to uacuser1;

只要有权限的用户都可以进行赋权或回收权限,不一定要使用root

与root具有差不多高权限的用户

GRANT ALL PRIVILEGES ON *.* TO 'yth_dba'@'%' IDENTIFIED BY PASSWORD '*9B19858C16863BCAD3581AF92267E8061B80D422' WITH GRANT OPTION

赋权后要刷新:

FLUSH PRIVILEGES

全部权限解释:

ALL PRIVILEGES:影响除WITH GRANT OPTION之外的所有权限
ALTER:影响ALTER TABLE命令的使用
ALTER ROUTINE:影响创建存储例程的能力
CREATE:影响CREATE TABLE命令的使用
CREATE ROUTINE:影响更改和弃用存储例程的能力
CREATE TEMPORARY TABLES:影响CREATE TEMPORARY TABLE命令的使用
CREATE USER:影响创建、弃用;重命名和撤销用户权限的能力
CREATE VIEW:影响CREATE VIEW命令的使用
DELETE:影响DELETE命令的使用
DROP:影响DROP TABLE命令的使用
EXECUTE:影响用户运行存储过程的能力
EVENT:影响执行事件的能力(从MySQL5.1.6开始)
FILE:影响SELECT INTO OUTFILE和LOAD DATA INFILE的使用
GRANT OPTION:影响用户委派权限的能力
INDEX:影响CREATE INDEX和DROP INDEX命令的使用
INSERT:影响INSERT命令的使用
LOCK TABLES:影响LOCK TABLES命令的使用
PROCESS:影响SHOW PROCESSLIST命令的使用
REFERENCES:未来MySQL特性的占位符
RELOAD:影响FLUSH命令集的使用
REPLICATION CLIENT:影响用户查询从服务器和主服务器位置的能力
REPLICATION SLAVE:复制从服务器所需的权限
SELECT:影响SELECT命令的使用
SHOW DATABASES:影响SHOW DATABASES命令的使用
SHOW VIEW:影响SHOW CREATE VIEW命令的使用
SHUTDOWN:影响SHUTDOWN命令的使用
SUPER:影响管理员级命令的使用,如CHANGE、MASTER、KILL thread、mysqladmin debug、PURGE MASTER LOGS和SET GLOBAL
TRIGGER:影响执行触发器的能力(从MySQL5.1.6开始)
UPDATE:影响UPDATE命令的使用
USAGE:只连接,不授予权限

转载请标明出处:
http://blog.youkuaiyun.com/ouyida3/article/details/48226049
本文出自:【ouyida3的博客
2015.9.5

<think>好的,我现在需要帮助用户解决关于回收MySQL用户权限的问题。首先,用户想要回收User0c的权限,并验证是否成功。用户已经给出了一个可能的命令REVOKE ALL PRIVILEGES ON *.* FROM 'User0c'@'localhost'; 然后执行FLUSH PRIVILEGES;,接着验证权限是否还存在。 首先,我要确认REVOKE命令的正确用法。根据引用中的内容,GRANT命令用于赋权,而REVOKE则是回收权限。用户提到的命令结构看起来正确,但需要检查是否有遗漏的部分。例如,是否需要指定具体的权限或者数据库?用户使用的是*.*,这代表所有数据库和所有表,所以应该能回收所有全局权限。不过,可能还需要注意是否有GRANT OPTION权限,这部分可能需要单独回收,如引用2提到的WITH GRANT OPTION,可能需要用REVOKE GRANT OPTION ON ...来单独处理。 接下来,执行FLUSH PRIVILEGES是必要的,因为这样可以立即刷新权限,使更改生效,而不需要重启MySQL服务,引用3也提到了这一点。但需要确认是否所有情况下都需要执行,比如如果使用REVOKE语句,有些情况下可能自动生效,但为了保险起见,执行FLUSH PRIVILEGES总是好的。 然后是验证步骤。用户需要检查User0c是否还有权限。根据引用中的信息,可以使用SHOW GRANTS FOR 'User0c'@'localhost'; 来查看当前权限。如果回收成功,这个命令应该显示没有权限,或者仅有USAGE权限,这表示没有具体权限。另外,用户也可以尝试以User0c登录,执行一些操作,比如查询数据库,创建表等,来验证是否真的无法执行。 但需要注意,可能存在的常见问题包括:用户的主机名是否正确,比如是否是localhost还是其他IP;是否有多个用户条目(例如,User0c从不同主机登录的情况);以及是否回收了所有层级的权限,比如全局、数据库、表等。用户需要确保REVOKE命令中的主机部分和用户名正确匹配。例如,如果用户最初是从特定IP创建的,而这里用的是localhost,可能导致权限未正确回收。 另外,引用1中提到了赋权时指定了具体IP,所以回收时也需对应。比如,如果用户User0c是从192.168.1.50连接的,那么回收时应该用'User0c'@'192.168.1.50'而不是localhost。否则,REVOKE可能不生效,因为MySQL将不同主机视为不同用户。这点需要特别注意,用户可能在这里出错。 总结步骤应该是:首先执行REVOKE命令,确保主机名和用户名正确,然后FLUSH PRIVILEGES,接着用SHOW GRANTS验证。如果SHOW GRANTS显示USAGE,则说明权限回收。如果仍有其他权限,可能需要检查是否有其他用户记录,或者是否漏掉了某些权限,比如PROXY或特殊权限。 可能还需要检查mysql.user表,直接查询用户的权限字段,确认所有权限字段是否为N。例如,SELECT * FROM mysql.user WHERE User='User0c' AND Host='localhost'; 查看各个权限列是否为'N',这可以进一步确认权限回收情况。 此外,用户可能需要了解,REVOKE ALL PRIVILEGES并不会回收用户的登录权限,USAGE权限表示用户可以登录但没有其他权限。因此,如果希望完全删除用户,应该使用DROP USER命令,但这超出了当前问题的范围。 最后,用户的问题可能还涉及到如何正确使用REVOKE命令,确保所有权限回收,包括可能存在的数据库或表级别的权限。例如,如果之前给用户授予了特定数据库的权限,需要单独回收,但用户已经使用了*.*,所以应该覆盖了所有全局和数据库级别的权限。</think>### 分步解答 #### 1. 回收权限操作步骤 **步骤1:执行权限回收命令** 使用 `REVOKE ALL PRIVILEGES` 回收所有全局权限,并确保指定正确的主机名(用户创建时一致): ```sql REVOKE ALL PRIVILEGES ON *.* FROM 'User0c'@'localhost'; ``` - 若用户曾被授予 `GRANT OPTION` 权限,需单独回收: ```sql REVOKE GRANT OPTION ON *.* FROM 'User0c'@'localhost'; ``` **步骤2:刷新权限** 强制MySQL重新加载权限表,使回收操作立即生效: ```sql FLUSH PRIVILEGES; ``` #### 2. 验证权限是否回收 **方法1:通过 `SHOW GRANTS` 查询** 执行以下命令查看用户剩余权限: ```sql SHOW GRANTS FOR 'User0c'@'localhost'; ``` - **预期结果**:`USAGE` 表示无实际权限。 ``` +-----------------------------------------------+ | Grants for User0c@localhost | +-----------------------------------------------+ | GRANT USAGE ON *.* TO 'User0c'@'localhost' | +-----------------------------------------------+ ``` **方法2:直接查询权限** 检查 `mysql.user` 表中权限字段是否为 `N`: ```sql SELECT User, Host, Select_priv, Insert_priv, Update_priv FROM mysql.user WHERE User = 'User0c' AND Host = 'localhost'; ``` - **预期结果**:所有权限字段(如 `Select_priv`、`Insert_priv` 等)均为 `N`。 **方法3:实际权限测试** 尝试以 `User0c` 登录并执行操作: ```bash mysql -u User0c -p ``` - 执行无权限操作(如查询数据库)会报错: ```sql SHOW DATABASES; -- 仅显示无权限的数据库 CREATE TABLE test.t (id INT); -- 提示权限拒绝 ``` #### 3. 常见问题排查 - **问题1:主机名不匹配** 若用户创建时主机名为 `%` 或特定IP(如 `192.168.1.50`),需在 `REVOKE` 中保持一致: ```sql REVOKE ALL PRIVILEGES ON *.* FROM 'User0c'@'192.168.1.50'; ``` - **问题2:残留权限** 若用户拥有数据库或表级权限,需单独回收: ```sql REVOKE ALL PRIVILEGES ON `特定数据库`.* FROM 'User0c'@'localhost'; ``` #### 4. 彻底删除用户(可选) 若需完全移除用户,使用 `DROP USER`: ```sql DROP USER 'User0c'@'localhost'; ``` ### 总结 通过上述步骤可确保权限回收成功。核心验证方法是结合 `SHOW GRANTS` 实际操作测试[^1][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值