【MySQL】(10)用户和权限管理

一、应用场景

通常一个应用对应一个数据库,我们希望某个数据库只能被相关人员操纵,就需要创建用户并指定权限。只有登录该用户,才能在权限范围内操纵数据库。root 是权限最高的用户,它拥有所有的权限。

二、查询用户

在 mysql 数据库中查看 user 表:

Host 能限制数据库服务能被哪些 主机 / IP范围 登录。以 _priv 结尾的字段表示一些权限,Y 表示有该权限。

三、创建用户

1、语法

sql 复制代码
create user [if not exists] 'user_name'@'host_name' identified by 'auth_string';

'user_name'@'host_name' 是用户名完整描述,user_name 和 host_name 需要分别被 ' ' 引出。如果只用一个 ' ','user_name@host_name' 表示**'user_name@host_name'@'%',任意主机都能登录,容易出现安全问题**。

2、设置主机范围

计算方法:ip 地址是一个4字节的整数,主机 ip 地址与子网掩码做与操作。

三种 host_name 表示方法:

  • 192.168.100.0/255.255.255.0 ,表示192.168.100.0 子网中任意一台主机都能登录。
  • MySQL 8.0.23 开始,主机的 IPv4 地址可以用 CIDR 表示法指定,如:192.168.100.0/24,前 24 位表示网络,后 8 位表示主机。
  • 也可用 % 通配符,如 192.168.100.%,但是新版本已弃用,在以后可能会被删除。

3、示例

查询本机 ip 地址:

创建用户:

登录:

不指定 -h ip,默认以 localhost 地址登录。127.0.0.1、192.168.43.68 在连接时都需要指定 -h 参数,这三个地址虽然都是本地,但是 mysql 认为它们连接源并不相同。

因为没有给用户 'user2'@'127.0.0.1' 赋予权限,所以查询不到数据库:

四、修改密码

sql 复制代码
ALTER USER 'user_name'@'host_name' IDENTIFIED BY 'auth_string';

SET PASSWORD FOR 'user_name'@'host_name' = 'auth_string';

SET PASSWORD = 'auth_string';  -- 为当前用户改密码

五、删除用户

sql 复制代码
drop user [if exists] 'user_name'@'host_name'[,......];

有删除用户的权限才能执行。

六、授权与回收

MySQL 支持的权限列表:

授权语法:

sql 复制代码
grant 权限1[, 权限2...] on 操作范围 to 'user_name'@'host_name' [with grant option];
  • 权限:表中的 privilege。
  • 操作范围:*、*.*、db_name.*、db_name.table_name、table_name(当前数据库下某表的操作权限)。
  • with grant option:允许把自己的权限授予给别的用户。

示例:

当前在 root 用户:

创建两个用户:

使用自定义数据库,查看表:

授予 user1 插入当前数据库的表 class 的权限,并允许将自己的权限授予其他用户:

查看 user1 的权限:

登录 user1,将自己的权限授予 user2,也能回收,也能授予 with grant option:

回收权限语法:

sql 复制代码
revoke if exists 权限1[, 权限2] ON 操作范围 
from 'user_name1'@'host_name1'[, 'user_name2'@'host_name2'];

root 用户下回收 'user1'@'localhost' 的权限,不仅有 insert,还有 grant option,不然回收不干净:

如果权限授权或收回没生效,就刷新:

sql 复制代码
flush privileges;
相关推荐
AlickLbc几秒前
DM-V8数据库证书过期处理过程记录
数据库
l1t几秒前
DeepSeek总结的五分钟测试:Ted Dunning 谈 DuckDB 为何让分析更轻松
数据库·sql·duckdb
超级新零售16 分钟前
零售 SaaS 与本地部署,技术责任边界究竟怎么分?
数据库·零售
考虑考虑34 分钟前
瀚高数据库
数据库·后端·postgresql
dishugj1 小时前
oracle日志切换三条命令区别
数据库
Patrick在香港1 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
悟道书生1 小时前
(一)Navicate为什么转存结构和数据只转存表而不包含建库?
数据库·oracle
赤龙ERP2 小时前
ERP周报:连接器开闸、国产GPU进场与智能工厂253家
数据库·人工智能·大模型·rpa·erp·企业数字化·builderpattern
lusklusklusk2 小时前
SQL Server补丁版本号为什么“日期新反而版本低”?——GDR、CU、CU+GDR 版本号规则与升级路径详解
数据库
key_3_feng2 小时前
评估与对齐:Agent 自我进化的护栏
前端·数据库·agent