前言
本篇文章主要讲解Mysql
中的用户管理和权限管理,包括:创建、删除用户,授予、撤销权限
等操作,通过多个案例帮助大家快速掌握这些知识点,以便更好的管理Mysql用户和权限。
1、用户管理
1.1 查看用户
-
查看所有用户
select user, host from mysql.user;
-
查看当前登录用户
select current_user();
或
select user();
1.2 创建用户
1、基本语法
create user '用户名'@'主机名' identified by '密码';
2、常用创建用户示例
-
创建本地访问用户:
create user '用户名'@'localhost' identified by '密码';
-
创建可从任何主机访问的用户(不推荐,有安全风险):
create user '用户名'@'%' identified by '密码';
-
创建可从特定IP访问的用户:
create user '用户名'@'192.168.1.100' identified by '密码';
-
创建可从IP段访问的用户:
create user '用户名'@'192.168.1.%' identified by '密码';
1.3 修改用户密码
-
方法1:使用set password语句
set password for '用户名'@'主机名' = password('新密码');
-
方法2:使用alter user语句(mysql 5.7.6及以上版本)
alter user '用户名'@'主机名' identified by '新密码';
-
方法3:使用update直接修改mysql.user表
update mysql.user set authentication_string=password('新密码') where user='用户名' and host='主机名'; flush privileges; # 修改完后,刷新权限
-
修改当前登录用户密码
set password = password('新密码');
注意事项
-
执行后可能需要flush privileges;刷新权限
-
密码建议使用强密码
-
主机名通常为’
localhost
’或’%
'(允许任意主机连接)
例如修改用户’root
’在本地登录的密码:
set password for 'root'@'localhost' = password('newpass123');
1.4 删除用户
-
删除单个用户
drop user '用户名'@'主机名';
例如:
drop user 'testuser'@'localhost';
-
删除多个用户,用逗号隔开
drop user 'user1'@'localhost', 'user2'@'%';
注意事项:
-
执行此命令需要具有mysql的
root
权限或足够的权限 -
删除用户前请确保该用户已不再需要
-
删除用户不会自动删除该用户创建的数据库对象
2、权限管理
2.1 给用户授予权限(grant)
1、基本语法
grant 权限类型 on 数据库对象 to 'username'@'host' [with grant option];
常见权限类型:
-
数据操作:
select, insert, update, delete
-
结构操作:
create, alter, drop, index
-
管理权限:
all privileges, grant option, super
-
其他权限:
execute(存储过程), trigger
权限作用范围:
作用范围 | 示例 | 说明 |
---|---|---|
全局权限 | on *.* | 所有数据库的所有表 |
指定数据库 | on dbname.* | 某个数据库的所有表 |
指定表 | on dbname.tablename | 特定数据库的特定表 |
列级权限 | update(col1, col2) | 仅允许操作指定列 |
存储过程/函数 | on procedure funcname | 允许执行存储过程或函数 |
2、常用方法示例
-
授予所有数据库的只读权限:
grant select on *.* to 'user'@'localhost';
-
授予特定数据库的全部权限:
grant all privileges on dbname.* to 'user'@'%';
-
授予多权限(select + insert + update):
grant select, insert, update on dbname.* to 'user'@'192.168.1.%';
-
授予列级权限:
grant select, update(name, age) on dbname.employees to 'hr'@'%';
-
允许用户授予权限给他人:
grant select on dbname.* to 'admin'@'%' with grant option;
如果在使用
grant
语句为某个用户授予权限时添加了with grant option
子句,则表示该用户可以将自己拥有的权限授予其他人。
2.2 权限管理(查看、撤销)
1、查看用户权限
-
查看指定用户权限:
show grants for '用户名'@'主机名';
示例:
show grants for 'username'@'host';
-
查看用户详细权限信息
select * from mysql.user where user='用户名';
-
查看所有用户及其权限概况
select * from mysql.user;
2、撤销权限
-
撤销指定类型权限(revoke):
revoke 权限类型 on 数据库对象 from 'username'@'host';
示例:撤销
insert
权限revoke insert on dbname.* from 'user'@'%';
-
撤销全部权限:
revoke all privileges, grant option from 'username'@'host';
2.3 注意事项
-
host字段的匹配规则:
-
localhost
:仅允许本地连接 -
%
:允许任意ip远程连接 -
192.168.1.%
:允许特定ip段连接
-
-
mysql 8.0+ 变化:
- 不再允许通过
grant
隐式创建用户,必须先使用create user
- 不再允许通过
-
权限层级覆盖:
- 全局权限 > 数据库权限 > 表权限 > 列权限
-
安全建议:
-
避免使用
all privileges
和with grant option
-
按最小权限原则分配权限
-
通过以上命令可以完成mysql
用户权限的全生命周期管理。建议通过show grants
验证权限分配是否符合预期。