在 MySQL 中,权限是指用户对数据库、表、列等对象的操作权限。权限可以分为全局权限和对象权限。
全局权限:指在 MySQL 服务器上的所有数据库和表都适用的权限,例如创建用户、修改密码等。
对象权限:指对特定数据库、表、列等对象的操作权限,例如对某个数据库进行查询、更新等操作。
二、常用权限命令
1. 创建用户
CREATE USER ‘用户名’@’主机名’ IDENTIFIED BY ‘密码’;
其中,用户名是要创建的用户的名称,主机名指定该用户可以从哪个 IP 地址或主机名连接到 MySQL 服务器,密码是用户的登录密码。
2. 授予权限
GRANT 权限 ON 数据库.表 TO ‘用户名’@’主机名’;
其中,权限包括 SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER 等,数据库.表指定要授予权限的数据库和表,用户名和主机名同创建用户的命令。
3. 撤销权限
REVOKE 权限 ON 数据库.表 FROM ‘用户名’@’主机名’;
4. 刷新权限
FLUSH PRIVILEGES;
刷新权限是指在修改用户权限后,需要使用该命令才能使修改生效。
三、高级应用
1. 级联权限
级联权限是指将某个用户的权限传递给其他用户。将用户 A 对数据库 db1 的 SELECT 权限授予用户 B,则用户 B 也将具有对数据库 db1 的 SELECT 权限。
GRANT SELECT ON db1.* TO ‘A’@’localhost’;
GRANT SELECT ON db1.* TO ‘B’@’localhost’ WITH GRANT OPTION;
GRANT SELECT ON db1.* TO ‘C’@’localhost’ WITH GRANT OPTION;
以上命令将用户 A 对数据库 db1 的 SELECT 权限授予用户 B,然后将用户 B 的 SELECT 权限授予用户 C。
2. 细粒度权限控制
MySQL 支持对列级别的权限控制,可以对某个表中的某列进行授权。对表 t1 的列 c1 授予用户 A SELECT 权限:
GRANT SELECT (c1) ON db1.t1 TO ‘A’@’localhost’;
以上命令将表 t1 的列 c1 授予用户 A 的 SELECT 权限。
3. 角色授权
MySQL 支持角色授权,可以将权限授予角色,然后将角色授予用户。创建一个角色 editor,将编辑文章的权限授予该角色,然后将角色授予用户 A:
CREATE ROLE editor;
GRANT INSERT, UPDATE ON db1.article TO editor;
GRANT editor TO ‘A’@’localhost’;
以上命令将编辑文章的权限授予角色 editor,然后将角色 editor 授予用户 A。
MySQL 的权限系统是一个非常强大的工具,可以实现细粒度的权限控制。在实际应用中,需要根据业务需求,灵活地运用权限命令来控制用户的访问权限。