当前位置: 首页 > news >正文

MySQL数据库精研之旅第十三期:吃透用户与权限管理,筑牢数据库安全第一道防线

专栏:MySQL数据库成长记

个人主页:手握风云

目录

一、应用场景

二、用户

2.1. 查看用户

2.2. 创建用户

2.3. 修改密码

2.4. 删除用户

三、权限与授权

3.1. 内置权限列表

3.2. 给用户授权

3.3. 回收权限


一、应用场景

        数据库服务安装成功后默认有⼀个root用户,可以新建和操纵数据库服务中管理的所有数据库。在真实的使用过程中,通常每个应用对应着⼀个数据库,我们只希望某个用户只能操纵和管理当前应用对应的那个数据库,而不能操纵和管理其他应⽤的数据库,这时就可以添加⼀个用户并指定用户的权限。

        在MySQL中如果要对数据进行某些操作,必须添加一个用户,并对用户赋予相应的权限。安装完MySQL之后,操作系统已经赋予了我们root用户的权限。

二、用户

2.1. 查看用户

        MySQL中的用户信息保存在mysql系统数据库的user表中,可以通过select语句查看。

show tables;
desc user;
select host, user, authentication_string from user;

        authentication_string代表加密过的密码。我们也可以点击user表查看存储的用户信息。

        Host是用户用来登录的主机名或者IP,User是用户名,剩余的是用户所有的权限,"Y"表示拥有权限,"N"表示没有权限。“localhost, user”就是我们使用的用户。

2.2. 创建用户

  • 语法
CREATE USER [IF NOT EXISTS] 'user_name'@'host_name' IDENTIFIED BY 'auth_string'

        'user_name'@'host_name'统一称为用户,user_name是用来登录MySQL的用户名,host_name是用来登录的主机名或IP,起到一个“白名单”的作用,只有指定的机器上才可以访问MySQL。不指定host_name默认'user_name'@'%',存在安全风险。user_name和host_name需用单引号包裹,避免格式错误。host_name可通过子网掩码/CIDR设置范围(如198.51.100.0/24)。

        比如我们想添加一个'gao'@'192.168.0.124'用户,就可以通过我主机的TPV4地址进行访问。这样的用户只能通过一台主机登录到MySQL,如果我们想让局域网内所有的机器都可以登录,就需要把IP地址设置成一个范围。这个范围设置为129.168.100开头的都可以。

  • 示例
-- 添加一个名为gao1的新用户,允许从本机登录
create user 'gao1'@'localhost' identified by '123456';
-- 添加一个名为gao2的新用户,允许从192.168.1.1/24网段登录
create user 'gao2'@'192.168.1.1/24' identified by '123456';

        如果我们用刚创建的两个用户去登录我主机的MySQL,第一个可以登录,但是第二个主机不允许登录。

        第一个用户虽然登录成功,但是还没添加权限,所以不能进行任何数据库的操作。

2.3. 修改密码

  • 语法
-- 为指定用户设置密码(推荐)
ALTER USER 'user_name'@'host_name' IDENTIFIED BY 'auth_string';-- (不推荐)
SET PASSWORD FOR 'user_name'@'host_name' = 'auth_string;-- 为当前用户设置密码
SET PASSWORD = 'auth_string';
  • 示例
alter user 'gao1'@'localhost' identified by '123457';

2.4. 删除用户

  • 语法
-- 可以一次删除多个
DROP USER [IF EXISTS] 'user_name'@'host_name'[, ...]
  • 示例
drop user 'gao2'@'192.168.1.1/24';

三、权限与授权

3.1. 内置权限列表

3.2. 给用户授权

-- 查看用户权限
show grants for 'gao1'@'localhost';

  • 语法
grant priv_type[, ...] on priv_level to 'user_name'@'host_name' [WITH GRANT OPTION]

        priv_level:* | . | db_name.* | db_name.tbl_name等(如.表示所有库表)。

  • 示例
-- 为指定用户赋予查询权限
grant select on test3_26_1.* to 'gao1'@'localhost';
-- 授权所有权限
grant ALL on test3_26_1.* to 'gao1'@'localhost';

        注意:授权后需刷新权限(flush privileges)或重新登录使其生效。

3.3. 回收权限

  • 语法
REVOKE [IF EXISTS] priv_type[, ...] ON priv_level FROM 'user_name'@'host_name'[, ...]
http://www.dtcms.com/a/354426.html

相关文章:

  • 深入解析Java并发编程与单例模式
  • 详解Log4j组件:工业级Java日志框架
  • Redis实战-点赞的解决方案
  • vue布局
  • LightGBM 在金融逾期天数预测任务中的经验总结
  • 2025年渗透测试面试题总结-36(题目+回答)
  • 2025年渗透测试面试题总结-37(题目+回答)
  • vue3 数据库 内的 字符 显示 换行符
  • LeetCode-238除自身以外数组的乘积
  • 基于单片机步进电机控制电机正反转加减速系统Proteus仿真(含全部资料)
  • codeforces(1045)(div2) E. Power Boxes
  • 2024年09月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Kubernetes 的20 个核心命令分类详解
  • 深度学习11 Deep Reinforcement Learning
  • 基于视觉的网页浏览Langraph Agent
  • 【RAG知识库实践】向量数据库VectorDB
  • Linux应用软件编程---网络编程(TCP并发服务器构建:[ 多进程、多线程、select ])
  • Spring Start Here 读书笔记:第15 章 Testing your Spring app
  • 【PyTorch】基于YOLO的多目标检测项目(二)
  • vue2 watch 的使用
  • Xshell 自动化脚本大赛技术文章大纲
  • TypeScript:重载函数
  • 《Linux 网络编程四:TCP 并发服务器:构建模式、原理及关键技术(select )》
  • oceanbase-部署
  • yolo ultralytics之yolov8.yaml文件简介
  • 《信息检索与论文写作》实验报告三 中文期刊文献检索
  • Linux 云服务器内存不足如何优化
  • LinuxC系统多线程程序设计
  • C语言:数据在内存中的存储
  • nginx referer-policy 和 referer