MySQL中常用的权限有以下几种,更多的权限可以参考官方文档:https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html
权限 | 说明 |
---|---|
ALL,ALL PRIVILEGES | 所有权限 |
SELECT | 查询数据的权限 |
INSERT | 插入数据的权限 |
UPDATE | 修改数据的权限 |
DELETE | 删除数据的权限 |
ALTER | 修改表属性、字段结构的权限 |
DROP | 删除数据库、表、视图的权限 |
CREATE | 创建数据库和表的权限 |
查询用户所拥有的权限:SHOW GRANT FOR '用户名'@'主机名'
授予权限的命令格式格式:GRANT '权限列表' ON 数据库.表名 TO '用户名'@'主机名'
撤销权限的命令格式:REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名'
同时授权多个权限时,使用逗号进行分隔,授权时,数据库名称和表名可以使用*通配符,代表所有的数据库以及表。
mysql> show grants for 'jiangxl'@'%';
+-------------------------------------+
| Grants for jiangxl@% |
+-------------------------------------+
| GRANT USAGE ON *.* TO `jiangxl`@`%` |
+-------------------------------------+
1 row in set (0.00 sec)
在输出jiangxl用户拥有的权限列表后,看到的是USAGE,表示没有任何的权限。
mysql> grant insert,update,select on db_1.* to 'jiangxl'@'%';
mysql> show grants for 'jiangxl'@'%';
+-----------------------------------------------------------+
| Grants for jiangxl@% |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO `jiangxl`@`%` |
| GRANT SELECT, INSERT, UPDATE ON `db_1`.* TO `jiangxl`@`%` |
+-----------------------------------------------------------+
mysql> grant create,drop on db_1.* to 'jiangxl'@'%';
mysql> show grants for 'jiangxl'@'%';
+-------------------------------------------------------------------------+
| Grants for jiangxl@% |
+-------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `jiangxl`@`%` |
| GRANT SELECT, INSERT, UPDATE, CREATE, DROP ON `db_1`.* TO `jiangxl`@`%` |
+-------------------------------------------------------------------------+
mysql> grant alter on db_1.* to 'jiangxl'@'%';
mysql> show grants for 'jiangxl'@'%';
+--------------------------------------------------------------------------------+
| Grants for jiangxl@% |
+--------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `jiangxl`@`%` |
| GRANT SELECT, INSERT, UPDATE, CREATE, DROP, ALTER ON `db_1`.* TO `jiangxl`@`%` |
+--------------------------------------------------------------------------------+
mysql> grant all on db_1.* to 'jiangxl'@'%';
mysql> show grants for 'jiangxl'@'%';
+---------------------------------------------------+
| Grants for jiangxl@% |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO `jiangxl`@`%` |
| GRANT ALL PRIVILEGES ON `db_1`.* TO `jiangxl`@`%` |
+---------------------------------------------------+
同一个用户再不同的时刻,分配了多个权限,例如上午为jiangxl用户分配了增改查的权限,下午为jiangxl用户分配了创建和删除数据库、表的权限,那么这些权限,会同时追加到一条记录中,也就是说在执行查看权限的命令时,永远只会显示两条记录,第一条是默认的权限记录,第二条就是我们授权的权限记录,无论授权了多少次,都会以追加的形式展示。
如果第一次分配了个别权限,那么最后一次分配了ALL权限,那么最后会被ALL全部覆盖。
撤销权限时,如果跟的权限列表是ALL,那么所有的权限都会被撤销。
1)撤销jiangxl用户的增改查权限
mysql> revoke insert,update,select on db_1.* from 'jiangxl'@'%';
2)撤销jiangxl用户的创建和删除数据库、表的权限
mysql> revoke create,drop on db_1.* from 'jiangxl'@'%';
3)撤销jiangxl用户的全部权限
mysql> revoke all on db_1.* from 'jiangxl'@'%';