站在安全的角度看,不同的业务如果连的是同一个 MySQL 服务,就需要创建不同的用户,并为这些用户配置他们所需要的最小权限。这一节内容就来聊聊 MySQL 的用户和权限管理。
创建用户,可以使用下面的命令:
CREATE USER 'martin'@'localhost' IDENTIFIED BY 'password';
如果要增加一些资源限制,可使用:
CREATE USER 'martin'@'localhost' WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;
删除用户,可执行:
DROP USER 'martin'@'localhost';
MySQL 常用的权限有这些:
权限 | 解释 |
---|---|
insert | 允许写入数据 |
delete | 允许删除数据 |
select | 允许查询数据 |
update | 允许更新数据 |
create | 允许创建库和表 |
drop | 允许删除库、表、视图等。 |
alter | 允许修改表结构 |
all | 除 grant option 和 proxy 权限外,赋予其他所有权限 |
更多 MySQL 权限可参考官方文档:https://dev.mysql.com/doc/refman/8.0/en/grant.html。
用户授权
GRANT insert,delete,select,update ON db1.* TO 'martin'@'localhost';
表示给 'martin'@'localhost' 赋予 db1 库的增删查改权限。
权限回收
REVOKE INSERT ON db1..* FROM 'martin'@'localhost';
表示回收用户 'martin'@'localhost' 在 db1 库上的 INSERT 权限。
有时候,某一类用户会有固定的权限(比如业务用户有增删查改权限),这种情况,可以考虑使用 MySQL 的角色,MySQL 角色是多个权限的集合,可通过下面的方法创建角色:
CREATE ROLE 'app_developer';
然后给角色赋权:
GRANT select,update,delete,insert ON app_db.* TO 'app_developer';
使用角色
首先创建一个用户:
create user 'martin_role'@'localhost' identified by 'IHB87Edsa';
然后给用户赋予角色,用来替换 GRANT select,update,delete,insert:
grant 'app_developer' to 'martin_role'@'localhost';
使用 ALTER USER 语句修改密码
ALTER USER user IDENTIFIED BY 'auth_string';
通过 SET 方式设置密码
SET PASSWORD FOR 'martin'@'localhost' = 'auth_string';
如果没加用户名,则是给当前用户设置密码:
SET PASSWORD = 'auth_string';
今天的内容就到这里,《MySQL 基础知识笔记》系列文章持续更新中,欢迎关注公众号。关注公众号后,也可回复“合集”,获取数据库(MySQL、Redis、MongoDB、ClickHouse)干货合集。