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

Mysql高级篇(上)

Mysql高级篇(上)

  • Mysql架构介绍(一)
    • 1、Linux环境下的MySQL的安装与使用
    • 2、MySQL请求到响应字符集变化(了解)
    • 3、MySQL8 的主要目录结构
    • 4、数据库和文件系统关系
      • (1)默认数据库
      • (2)数据库在文件系统中的表示
    • 5、用户与权限管理
      • (1)用户管理
        • 创建
          • 疑问点
        • 修改(`表字段的修改`)
        • 删除
        • 用户密码修改与管理
          • 修改当前登录用户
          • root 修改其他用户
      • (2)权限管理
        • 权限列表
        • 授予权限原则
        • 授予权限方式
        • 授予权限命令
        • 查看权限
        • 收回权限
      • (3)权限表
      • (4)访问控制(了解)
        • 1. 连接核实阶段
        • 2. 请求核实阶段
      • (5)角色管理
        • 1. 创建角色
        • 2. 授予权限给角色
        • 3. 查看用户的角色和权限
        • 4. 收回角色权限
        • 5. 删除角色
        • 6. 将角色分配给用户
        • 7. 激活角色
        • 8. 默认角色
    • 6、配置文件的使用

Mysql架构介绍(一)

1、Linux环境下的MySQL的安装与使用

参考博文 Linux环境下的MySQL的安装与使用

2、MySQL请求到响应字符集变化(了解)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3、MySQL8 的主要目录结构

类别目录
数据库文件目录/var/lib/mysql/
命令目录/usr/bin//usr/sbin
配置文件目录/usr/share/mysql-8.0/(命令及配置文件)
/etc/下的my.cnf文件

在这里插入图片描述

4、数据库和文件系统关系

(1)默认数据库

SHOW DATABASES;

在这里插入图片描述
在这里插入图片描述

(2)数据库在文件系统中的表示

参考站内博文 Linux环境下MySQL的数据目录

5、用户与权限管理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)用户管理

创建

创建后,用户host默认为 % (任意IP)
CREATE USER '用户名' IDENTIFIED BY '密码';


创建指定host的用户
CREATE USER '用户名'@'IP地址' IDENTIFIED BY '密码';

在这里插入图片描述

疑问点

Linux环境下我登录MySQL,图片中是我用root用户登录MySQL的信息,上面user表中的用户名和对应的host值,其中有两个叫summer的用户; 随后我退出root用户,然后用summer用户登录MySQL,如果所示最后一张图片是用summer用户登录的,也登录成功了,但是我不知道是哪个summer用户,怎么确定是哪个summer用户啊?

在这里插入图片描述
在这里插入图片描述




在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改(表字段的修改)

UPDATE 表名 SET 字段名=字段值 WHERE 条件;


刷新权限(必须要刷新,否则不生效)

FLUSH PRIVILEGES;

在这里插入图片描述
在这里插入图片描述

删除

DROP 表名 '用户名'@'host值';

在这里插入图片描述

用户密码修改与管理
修改当前登录用户

1、使用 ALTER USER 命令修改当前用户密码(推荐)

在命令行中修改(当前用户已经登录)USER()是函数
ALTER USER USER() IDENTIFIED BY '新密码';


远程工具(如:navicat)修改
ALTER USER '用户名'@'host值' IDENTIFIED BY '新密码';

在这里插入图片描述

2、使用 SET 命令修改当前用户密码

在命令行中修改(当前用户已经登录)
SET PASSWORD='新密码';


远程工具(如:navicat)修改
SET PASSWORD FOR '用户名'@'host值' = '新密码';

在这里插入图片描述

root 修改其他用户

和上述远程工具一样

ALTER USER命令修改

  • ALTER USER '用户名'@'host值' IDENTIFIED BY '新密码';


SET 命令修改

  • SET PASSWORD FOR '用户名'@'host值' = '新密码';



密码管理参考 腾讯云开发者社区文章




(2)权限管理

权限列表

SHOW PRIVILEGES;

在这里插入图片描述

授予权限原则
  • 只授予满足需要的最小权限
  • 创建用户的时候限制用户的登录主机,一般是限制成指定IP或内网IP段
  • 为每个用户设置满足密码复杂度的密码
  • 定期清理废弃用户,回收权限
授予权限方式

1. 角色赋予用户给用户授权
2. 直接给用户授权

授予权限命令

GRANT 权限1,权限2,...权限n ON 数据库名称.表名 TO 用户名@用户地址 [IDENTIFIED BY '密码口令'];

在这里插入图片描述

查看权限

查看当前用户的权限
SHOW GRANTS;

查看某用户的全局权限
SHOW GRANTS FOR '用户名'@'用户地址';

收回权限

收回权限就是取消已经赋予用户的某些权限,使用 revoke语句;
如果要删除某个用户的张虎,那么在删除之前,安全起见,在删除之前,一定要先收回该用户的所有权限

注意:收回权限需用户重新登录后才能生效

收回权限命令

REVOKE 权限1,权限2,...权限n ON 数据库名.表名 FROM 用户名@用户地址;

在这里插入图片描述

(3)权限表

MySQL 8.0 的权限表包括 mysql.usermysql.dbmysql.tables_privmysql.columns_privmysql.procs_priv。这些表存储了用户账号数据库级别的权限信息

  • 查看【用户账号】权限
    SELECT * FROM mysql.user;

  • 查看【数据库级别】权限
    SELECT * FROM mysql.db;

  • 查看【表级别】权限
    SELECT * FROM mysql.tables_priv;

  • 查看【列级别】权限
    SELECT * FROM mysql.columns_priv;

  • 查看【存储过程和函数】权限
    SELECT * FROM mysql.procs_priv;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(4)访问控制(了解)

Linux下,MySQL 8.0 的访问控制包括两个重要的阶段:连接核实阶段请求核实阶段。这两个阶段确保MySQL能够在用户连接和执行操作时进行权限的验证,从而保证数据库的安全性和控制权。

1. 连接核实阶段

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 请求核实阶段

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(5)角色管理

MySQL 8.0 中,角色管理变得更加灵活和强大。角色可以看作是一组权限的集合,用户可以被授予一个或多个角色,从而简化了权限管理

1. 创建角色
-- host_name 可以省略,省略后默认为 % ;role_name不可省略
-- 可以一次性创建多个角色,中间用 逗号 隔开
CREATE ROLE 'role_name'@'host_name';
2. 授予权限给角色
-- host_name 可以省略,省略后默认为 % ;role_name不可省略
-- PRIVILEGES 代表权限的名称,多个权限用逗号隔开
-- SHOW PRIVILEGES;  查看权限
GRANT PRIVILEGES ON 数据库名.表名 TO 'role_name'@'host_name';-- 例如:授予developer角色对数据库mydb的所有表的SELECT和INSERT权限
GRANT SELECT, INSERT ON mydb.* TO 'developer';
3. 查看用户的角色和权限
-- 查看用户被分配了哪些角色,host_name 可以省略,省略后默认为 % 
SHOW GRANTS FOR 'user_name'[@'host_name'];-- 例如:查看用户alice的角色和权限:
SHOW GRANTS FOR 'alice';
4. 收回角色权限
-- 如果需要撤销用户的角色,可以使用REVOKE命令:
REVOKE 'role_name' FROM 'user_name';-- 收回角色的权限
-- PRIVILEGES 代表权限的名称,多个权限用逗号隔开
-- SHOW PRIVILEGES;  查看权限
REVOKE PRIVILEGES  ON 数据库名.表名  FROM 'role_name'@'host_name';-- 例如:撤销用户alice的developer角色:
REVOKE 'developer' FROM 'alice';--- 收回 developer角色对数据库mydb的所有表的SELECT和INSERT权限
REVOKE SELECT, INSERT ON mydb.* FROM  'developer';
5. 删除角色
-- 如果不再需要某个角色,可以将其删除:
DROP ROLE 'role_name';
6. 将角色分配给用户
-- 将角色分配给用户可以让用户继承该角色的所有权限。
GRANT 'role_name' TO 'user_name';-- 例如,将developer角色分配给用户alice:
GRANT 'developer' TO 'alice';
7. 激活角色

分配了角色后,用户需要激活该角色才能使用它的权限。用户可以通过以下命令来激活某个角色

-- 分配了角色后,用户需要激活该角色才能使用它的权限。用户可以通过以下命令来激活某个角色
SET ROLE 'role_name'[@'host_name' TO 'user_name'@'host_name'];--如果想要激活所有已分配的角色,可以使用:
SET ROLE ALL;
8. 默认角色
-- 用户可以设置一个或多个默认角色,这些角色将在用户登录时自动激活:
SET DEFAULT ROLE 'role_name' FOR 'user_name';-- 例如,设置developer为用户alice的默认角色:
SET DEFAULT ROLE 'developer' FOR 'alice';

6、配置文件的使用

MySQL 8.0 中,my.cnf 文件是用于配置 MySQL 服务器及其相关工具行为的关键文件。不同的部分标签(如[mysqld]、[server]、[mysql]等)对应不同的 MySQL 组件或客户端工具的配置。

在这里插入图片描述

-- 使用示例
[mysqld]
port = 3306
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
log-error = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
max_connections = 200
innodb_buffer_pool_size = 1G

在这里插入图片描述
在这里插入图片描述

[mysql]
user = root
host = localhost
port = 3306
socket = /var/lib/mysql/mysql.sock

在这里插入图片描述

[mysqld_safe]
log-error = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
nice = 0
open-files-limit = 8192

在这里插入图片描述

[client]
port = 3306
host = localhost
user = root
socket = /var/lib/mysql/mysql.sock

在这里插入图片描述

[mysqladmin]
user = root
password = your_password
host = localhost

总结:
MySQL 8.0 中,my.cnf 文件通过不同的部分标签(如 [mysqld]、[client]、[mysql] 等)来配置 MySQL 服务器和各个工具的行为。理解和正确配置这些部分,可以有效地管理 MySQL 的各种功能和工具,使其更好地适应您的需求。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【HuggingFace Transformers】LlamaModel源码解析
  • 003、架构_详解(重点)
  • 【python计算机视觉编程——多视图几何】
  • pnpm快速入门
  • ComfyUI:基于差分扩散的像素级图像修改
  • 【Linux修行路】进程通信——消息队列、信号量
  • 计算之魂:持续于正确的因果链(一)
  • MySQL用户管理:用户管理、用户授权、用户权限撤销
  • 兴业证券基于Apache DolphinScheduler的应用实践
  • Linux 系统入门:高级系统管理与文本处理
  • 29 路由工作原理
  • 大二必做项目贪吃蛇超详解之中篇游戏设计与分析
  • sqlserver数据库常见操作
  • 力扣1353.最多可以参加的会议数目
  • Webpack打包常见问题及优化策略
  • 时间复杂度分析经典问题——最大子序列和
  • crontab执行失败的多种原因
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Javascript弹出层-初探
  • JavaScript函数式编程(一)
  • java第三方包学习之lombok
  • Mac转Windows的拯救指南
  • PhantomJS 安装
  • PHP那些事儿
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 程序员最讨厌的9句话,你可有补充?
  • 将回调地狱按在地上摩擦的Promise
  • 漂亮刷新控件-iOS
  • 算法-插入排序
  • 消息队列系列二(IOT中消息队列的应用)
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ​如何在iOS手机上查看应用日志
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • (+4)2.2UML建模图
  • (13):Silverlight 2 数据与通信之WebRequest
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (正则)提取页面里的img标签
  • (转)setTimeout 和 setInterval 的区别
  • .bat批处理出现中文乱码的情况
  • .NET Core 2.1路线图
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET实现之(自动更新)
  • .NET中分布式服务
  • @Autowired多个相同类型bean装配问题
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [Android]RecyclerView添加HeaderView出现宽度问题
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [C#]OpenCvSharp 实现Bitmap和Mat的格式相互转换
  • [codeforces]Levko and Permutation
  • [CTF夺旗赛] CTFshow Web1-12 详细过程保姆级教程~