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

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.xdnf.cn/news/19121.html

相关文章:

  • 【MySQL数据库】存储引擎 学习记录
  • 高光谱成像在食品质量和安全检测中的应用
  • 【C++游记】子承父业——乃继承也
  • [p2p-Magnet] 队列与处理器 | DHT路由表
  • iOS文件管理在uni-app开发中的实战应用,多工具解决
  • hive on tez如果是2个大表union会写几次临时文件到hdfs目录,数据量如何计算
  • 密码管理中
  • 水果目标检测[2]:ALAD-YOLO:一种轻便、精确的苹果叶病检测仪
  • 学习Python中Selenium模块的基本用法(7:元素操作-1)
  • 【golang长途旅行第33站】常量------补充知识点
  • golang 12 package 和 module
  • Docker 入门指南:从基础概念到常见命令及高级工具详解
  • C++:知识点小结
  • vue2 watch 的使用
  • 从 WPF 到 Avalonia 的迁移系列实战篇1:依赖属性的异同点与迁移技巧
  • LangChain4j入门一:LangChain4j简介及核心概念
  • Python计算点云的欧式、马氏、最近邻、平均、倒角距离(Chamfer Distance)
  • 嵌入式C语言进阶:高效数学运算的艺术与实战
  • MySQL 8 与 PostgreSQL 17 对比分析及迁移指南
  • 【网络】网络基础概念
  • HarmonyOS安全开发实战:一套好用的数据加密方案
  • mysql mvcc机制详解
  • Java全栈开发面试实战:从基础到微服务架构的深度解析
  • IntelliJ IDEA Debug 模式功能指南
  • 替身演员的艺术:pytest-mock 从入门到飙戏
  • 寻找AI——初识墨刀AI
  • 极海发布APM32F425/427系列高性能MCU:助力工业应用升级
  • Ansible模块实战,操作技巧
  • 【C#】获取不重复的编码(递增,非GUID)
  • 怎么理解API?