数据库实验2 数据库安全性定义与检查

news2024/12/23 22:30:28

前言:记得验收时问了一个问题吧,就是用户和角色的区别是什么

实验2.1自主存取控制实验

1.实验目的

掌握自主存取控制权限的定义和维护方法。

2.实验内容和要求

定义用户、角色,分配权限给用户、角色,回收权限,以相应的用户名登录数据库验证权限分配是否正确。选择一个应用场景,使用自主存取控制机制设计权限分配。可以采用两种方案。
方案一:采用SYSTEM超级用户登录数据库,完成所有权限分配工作,然后用相应用户名登录数据库以验证权限分配正确性;

方案二:采用SYSTEM用户登录数据库创建三个部门经理用户,并分配相应的权限,然后分别用三个经理用户名登录数据库,创建相应部门的USER,ROLE,并分配相应权限。

下面的实验报告示例采用了实验方案一.验证权限分配之前,请备份好数据库;针对不同用户所具有的权限,分别设计相应的SQL语句加以验证。

3.实验过程

通过 SQL 的 GRANT 语句和 REVOKE 语句实现

用户权限组成

  • 数据对象
  • 操作类型

定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作

定义存取权限称为授权

GRANT

语句的一般格式:

GRANT <权限>[,<权限>]... 
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION];

语义:将对指定操作对象的指定操作权限授予指定的用户

WITH GRANT OPTION子句:

  • 指定:可以再授予
  • 没有指定:不能传播

REVOKE

  • 授予的权限可以由DBA或其他授权者用REVOKE语句收回

语句的一般格式为:

REVOKE <权限>[,<权限>]... 
[ON <对象类型> <对象名>]
FROM <用户>[,<用户>]...;

设有一个企业,包括采购、销售和客户管理等三个部门,采购部门经理David,采购员Jeffery ;销售部门经理Tom ,销售员Jane;客户管理部门经理Kathy ,职员Mike。该企业一个信息系统覆盖采购﹑销售和客户管理等三个部门的业务,其数据库模式为TPC-H数据模式。针对此应用场景,使用自主存取控制机制设计一个具体的权限分配方案。

(0)开始准备

创建角色之后记得激活,可以把mysql设置为自动激活,(应该是一个用户对应一个全局变量act…,因为我做的时候是在创建角色的时候改过变量为ON,写这篇的时候直接在root下登录MySQL,发现这个变量是OFF)

show variables like 'activate_all_roles_on_login';
set global activate_all_roles_on_login = on;

(1)创建用户

  • 为采购、销售和客户管理等三个部门的经理创建用户标识,要求具有创建用户或角色的权利。
CREATE USER 'David' @'localhost' IDENTIFIED BY '123456';

GRANT CREATE USER,
CREATE ROLE ON *.* TO 'David' @'localhost' WITH GRANT OPTION;

CREATE USER 'Kathy' @'localhost' IDENTIFIED BY '123456';

GRANT CREATE USER,
CREATE ROLE ON *.* TO 'Kathy' @'localhost' WITH GRANT OPTION;

CREATE USER 'Tom' @'localhost' IDENTIFIED BY '123456';

GRANT CREATE USER,
CREATE ROLE ON *.* TO 'Tom' @'localhost' WITH GRANT OPTION;

可以看到,成功创建了用户

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j79lWtAO-1671714762767)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\1669693207592.png)]

  • 为采购、销售和客户管理等三个部门的职员创建用户标识和用户口令。
CREATE USER 'Jeffery'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'Jane'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'Mike'@'localhost' IDENTIFIED BY '123456';

可以看到,成功创建了用户

(2)创建角色并分配权限

1)为各个部门分别创建一个查询角色,并分配相应的查询权限。

  • 给采购部门创建一个角色 SELECT_purchase ,其具有查询零件表、供应商表、零件供应联系表的权限,对应其采购的需求
CREATE ROLE 'SELECT_purchase'@'localhost';

GRANT SELECT ON test.part TO 'SELECT_purchase'@'localhost';  #test改成对应的数据库即可
GRANT SELECT ON test.supplier TO 'SELECT_purchase'@'localhost';
GRANT SELECT ON test.partsupp TO 'SELECT_purchase'@'localhost';

SHOW GRANTS FOR 'SELECT_purchase'@'localhost';

运行结果如下:

  • 给销售部门创建一个角色 SELECT_sale ,其具有查询订单表和订单明细表的权限,对应其销售的需求
CREATE ROLE 'SELECT_sale'@'localhost';

GRANT SELECT ON test.orders TO 'SELECT_sale'@'localhost';
GRANT SELECT ON test.lineitem TO 'SELECT_sale'@'localhost';

SHOW GRANTS FOR 'SELECT_sale'@'localhost';

运行结果如下:

  • 给客户管理部门创建一个角色 SELECT_customer ,其具有查询顾客表、国家表、地区表的权限,对应其顾客管理的需求
CREATE ROLE 'SELECT_customer'@'localhost';

GRANT SELECT ON test.customer TO 'SELECT_customer'@'localhost';
GRANT SELECT ON test.nation TO 'SELECT_customer'@'localhost';
GRANT SELECT ON test.region TO 'SELECT_customer'@'localhost';

SHOW GRANTS FOR 'SELECT_customer'@'localhost';

运行结果如下:

2)为各个部门分别创建一个职员角色,对本部门具有查看、插入权限。

  • 给采购员Jeffery创建一个角色 WORKER_Jeffery,其具有插入和查询零件表、供应商表、零件供应联系表的权限
CREATE ROLE 'WORKER_Jeffery'@'localhost';

GRANT INSERT,SELECT ON test.part TO 'WORKER_Jeffery'@'localhost';
GRANT INSERT,SELECT ON test.partsupp TO 'WORKER_Jeffery'@'localhost';
GRANT INSERT,SELECT ON test.supplier TO 'WORKER_Jeffery'@'localhost';

SHOW GRANTS FOR 'WORKER_Jeffery'@'localhost';

运行结果如下:

  • 给销售员Jane创建一个角色 WORKER_Jane,其具有插入和查询订单表和订单明细表的权限
CREATE ROLE 'WORKER_Jane'@'localhost';

GRANT INSERT,SELECT ON test.orders  TO 'WORKER_Jane'@'localhost';
GRANT INSERT,SELECT ON test.lineitem  TO 'WORKER_Jane'@'localhost';

SHOW GRANTS FOR 'WORKER_Jane'@'localhost';

运行结果如下:

  • 给职员Mike创建一个角色WORKER_Mike,其具有插入和查询客表、国家表、地区表的权限
CREATE ROLE 'WORKER_Mike'@'localhost';

GRANT INSERT,SELECT ON test.nation  TO 'WORKER_Mike'@'localhost';
GRANT INSERT,SELECT ON test.region  TO 'WORKER_Mike'@'localhost';
GRANT INSERT,SELECT ON test.customer TO 'WORKER_Mike'@'localhost';

SHOW GRANTS FOR 'WORKER_Mike'@'localhost';

运行结果如下:

3)为各部门创建一个经理角色,相应角色对本部门的信息具有完全控制权限,对其他部门的信息具有查询权。经理有权给本部门职员分配权限。

CREATE ROLE 'Manager_David'@'localhost';

GRANT ALL ON test.part TO 'Manager_David'@'localhost';
GRANT ALL ON test.partsupp TO 'Manager_David'@'localhost';
GRANT ALL ON test.supplier TO 'Manager_David'@'localhost';

SHOW GRANTS FOR 'Manager_David'@'localhost';
CREATE ROLE 'Manager_Tom'@'localhost';

GRANT ALL ON test.orders TO 'Manager_Tom'@'localhost';
GRANT ALL ON test.lineitem TO 'Manager_Tom'@'localhost';

SHOW GRANTS FOR 'Manager_Tom'@'localhost';
CREATE ROLE 'Manager_Kathy'@'localhost';

GRANT ALL ON test.nation TO 'Manager_Kathy'@'localhost';
GRANT ALL ON test.region TO 'Manager_Kathy'@'localhost';
GRANT ALL ON test.customer TO 'Manager_Kathy'@'localhost';

SHOW GRANTS FOR 'Manager_Kathy'@'localhost';

总共创建如下:

经理:David Tom Kathy
员工:Jeffery Jane Mike
查询角色:SELECT_purchase SELECT_sale SELECT_customer
职员角色:WORKER_Jeffery WORKER_Jane WORKER_Mike
经理角色:Manager_David Manager_Tom Manager_Kathy

(3)给用户分配权限

1)给各部门经理分配权限。

GRANT 'Manager_David'@'localhost' TO 'David'@'localhost';
GRANT 'Manager_Tom'@'localhost' TO 'Tom'@'localhost';
GRANT 'Manager_Kathy'@'localhost' TO 'Kathy'@'localhost';

SHOW GRANTS FOR 'David'@'localhost';
SHOW GRANTS FOR 'Tom'@'localhost';
SHOW GRANTS FOR 'Kathy'@'localhost';

运行结果如下:

在这里插入图片描述

2)给各部门职员分配权限。

GRANT 'WORKER_Jeffery'@'localhost' TO 'Jeffery'@'localhost';
GRANT 'WORKER_Jane'@'localhost' TO 'Jane'@'localhost';
GRANT 'WORKER_Mike'@'localhost' TO 'Mike'@'localhost';

SHOW GRANTS FOR 'Jeffery'@'localhost';
SHOW GRANTS FOR 'Jane'@'localhost';
SHOW GRANTS FOR 'Mike'@'localhost';

(4)回收角色或用户权限

1)收回客户经理角色的销售信息查看权限。

REVOKE SELECT ON test.customer FROM 'Manager_Kathy'@'localhost';
REVOKE SELECT ON test.nation FROM 'Manager_Kathy'@'localhost';
REVOKE SELECT ON test.region FROM 'Manager_Kathy'@'localhost';

SELECT Table_name,Table_priv FROM mysql.tables_priv WHERE user='Manager_Kathy';

结果如下:

可以看到,其收回了查询select的权限

2)回收Mike的客户部门职员权限

回收被赋予Mike的角色WORKER_Mike的权限,先查询它的权限有哪些

select * from mysql.tables_priv where user='WORKER_Mike';

收回其权限

REVOKE SELECT,INSERT ON test.customer FROM 'WORKER_Mike'@'localhost';
REVOKE SELECT,INSERT ON test.nation FROM 'WORKER_Mike'@'localhost';
REVOKE SELECT,INSERT ON test.region FROM 'WORKER_Mike'@'localhost';

select * from mysql.tables_priv where user='WORKER_Mike';

(5)验证权限分配的正确性

1)以David用户名登录数据库,验证采购部门经理的权限

命令提示符输入

mysql -u David -p

输入密码后进入test数据库

use test;

验证采购部门经理的权限

SELECT * FROM part WHERE partkey=100;

SELECT * FROM partsupp WHERE partkey=100;
SELECT * FROM supplier WHERE suppkey=100;

在这里插入图片描述

可以看到,其能正常查询负责的几个表

2)验证Mike的客户部门职员权限。

输入quit退出David用户,再按照上面的方法进入Mike用户页面

输入show databases;查看结果

可以发现,其收回权限之后根本找不到test数据库

再来一个佐证:

查看和Mike同等级的Jane:

没有被回收角色权限的用户Jane就可以访问到test,验证成功

4.实验总结

在进行权限分配之后,针对不同用户所具有的权限,设计并执行若干SQL语句,验证权限分配是否有效。

5.思考题

(1)请分析WITH CHECK OPTION、 WIIH CRANT OPTION和WITH ADMIN OPTION有何区别与联系。

1)

with admin option和with grant option的区别:

级联授权:

WITH ADMIN OPTION和系统权限相关。
WITH GRANT OPTION和对象权限相关。
两种option都能让指定的用户级联授权。
举例:

1、sys用户赋权给lisi:
grant create session to lisi;—>能够连接实例
grant create session to lisi WITH ADMIN OPTION;—>lisi具有create session,并且可以将该权限赋权给其他用户。
2、lisi用户赋权给lisi1:
grant create session to lisi1;—>能够连接实例

回收权限:

1、WITH ADMIN OPTION(系统权限):
拥有WITH ADMIN OPTION的用户如果赋权给其他用户权限,则撤销权限时,仅撤销用户自己权限。
例如:
sys—>赋权给lisi—>lisi赋权给lisi1
sys revoke撤销lisi的系统权限,lisi的系统权限不受影响。

2、WITH GRANT OPTION(对象权限):
拥有WITH GRANT OPTION的用户如果赋权给其他用户权限,则撤销权限时,会发生级联权限撤销。
例如:
sys—>赋权给lisi—>lisi赋权给lisi1
sys revoke撤销lisi的对象权限,lisi1的对象权限失效。

with check option

with check option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。视图加上with check option 子句后对该视图进行插入、修改、删除操作时,DBMS会自动加上条件(透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式))。

(2)请结合上述实验示例分析使用角色进行权限分配有何优缺点。

优点:管理权限方便,可以根据实际情况具体地为一些角色分配相应地权利,具有良好地安全性
缺点:操作繁琐。

实验2.2 审计实验

参考 审计实验

打开数据库审计开关。以具有审计权限的用户登陆数据库,设置审计权限,然后以普通用户登录数据库,执行相应的数据操纵SQL语句,验证相应审计设置是否生效,最后再以具有审计权限的用户登录数据库,查看是否存在相应的审计信息。
mysql本身并没有操作审计的功能,需要采用general log方法记录sql操作。网上的插件都是基于MySQL5.7版本的,由于我使用的是最新版8.21所以不是使用插件,而是使用mysql8.x提供的general log来实现审计功能。但是开启它有以下几个缺点

  • 无论sql有无语法错误,只要执行了就会记录,导致记录大量无用信息,后期的筛选有难度。
  • Sql并发量很大时,log的记录会对io造成一定的印象,是数据库效率降低。
  • 日志文件很容易快速膨胀,不妥善处理会对磁盘空间造成一定影响。

1.实验目的

掌握数据库审计的设置和管理方法,以便监控数据库操作,维护数据库安全。

2.实验内容和要求

打开数据库审计开关。以具有审计权限的用户登录数据库,设置审计权限,然后以普通用户登录数据库,执行相应的数据操纵SQL语句,验证相应审计设置是否生效,最后再以具有审计权限的用户登录数据库,查看是否存在相应的审计信息。

3.实验过程

(1)审计开关

1)显示当前审计开关状态。

SHOW GLOBAL VARIABLES LIKE 'log_timestamps';
SHOW GLOBAL VARIABLES LIKE '%general%';

说明未开启审计

2) 暂时打开全局审计

SET GLOBAL general_log=on;
SHOW GLOBAL VARIABLES LIKE '%general%';

3) 查看审计文件保存的位置

show variables like 'general_log_file';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xqgq2LfQ-1671714762768)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\1669709524340.png)]

4)测试审计文件记录功能

SELECT * FROM part WHERE partkey=100;
SELECT * FROM part WHERE partkey=101;
SELECT * FROM part WHERE partkey=102;
SELECT * FROM part WHERE partkey=103;

查看审计文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fvZX15It-1671714762768)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\1669709589736.png)]

可以观察到审计文件中的记录了刚才的查询操作及其时间。

5)关闭审计文件

SET GLOBAL general_log=off;

4.实验总结

审计语句不是标准SQL语句,所以不同的系统语句格式和语法不尽相同。

5.思考题

试着设计一个例子,分析数据库审计对数据库性能的影响情况。

variables like ‘general_log_file’;


[外链图片转存中...(img-xqgq2LfQ-1671714762768)]



4)测试审计文件记录功能

```sql
SELECT * FROM part WHERE partkey=100;
SELECT * FROM part WHERE partkey=101;
SELECT * FROM part WHERE partkey=102;
SELECT * FROM part WHERE partkey=103;

查看审计文件:

[外链图片转存中…(img-fvZX15It-1671714762768)]

可以观察到审计文件中的记录了刚才的查询操作及其时间。

5)关闭审计文件

SET GLOBAL general_log=off;

4.实验总结

审计语句不是标准SQL语句,所以不同的系统语句格式和语法不尽相同。

5.思考题

试着设计一个例子,分析数据库审计对数据库性能的影响情况。

答:数据库审计功能用于监视并记录对数据库服务器的各类操作行为,并记入审计日志或数据库中以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。MySQL本身提供详细的sql执行记录–general log,但是开启记录日志的话,只要执行了sql就会记录,无论是否有错误,这就会导致记录大量的无用信息,如果sql并发量很大时,log的记录会对io造成一定的印象,降低数据库效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享巧记Linux命令的方法

最近有些学弟经常私信问我说&#xff0c;他们自己是Linux方面的小白&#xff0c;对于Linux的命令了解十分的少&#xff0c;虽然每次跟着我推荐的学习视频教程可以进行操作&#xff0c;但是离开了视频&#xff0c;就又是两眼抓瞎&#xff0c;什么也想不起来。不知道怎么样通过命…

【数据结构】队列与Queue接口

目录 一、队列 二、 Java里的Queue接口 1、概述 2、常用方法 1.入队 2.出队 3.获取队首元素 4、判空 三、单链表实现队列 1、准备字段 2、实现入队 3、实现出队 4、实现获取队首元素 5、实现判空 四、循环队列的实现 1、前言 2、字段准备 3、实现入队 4、实现…

一致性哈希

一、简介 这个算法是一种特殊的哈希算法&#xff0c;目的是解决分布式缓存的问题。 普通哈希算法在分布式存储具有较大的局限性&#xff0c;简单的讲就是难以扩展。 一致性哈希相对而言具有较好的容错性和可扩展性&#xff0c;更加适合现在的分布式存储。 二、经典哈希版本 …

SpringBoot+Vue项目实践课程教学管理平台

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

✿✿✿JavaScript --- JSON

目录 1.JSON的简介 2.JSON的语法规则 3.JSON 字符串转换为 JavaScript 对象 4.常用的JSON相关的函数 5.JSON对象的遍历 6.补充&#xff1a;JS中的this关键字 1.JSON的简介 JSON&#xff08; JavaScript Object Notation &#xff09; 是用于存储和传输数据的格式&#xf…

Android studio配置大内存,编译速度更快!

本文使用的是windows 10系统&#xff0c;Android studio 版本是Android Studio Chipmunk | 2021.2.1&#xff08;松鼠&#xff09; 目录为什么要配置大内存&#xff1f;默认内存是多少&#xff1f;如何扩大内存配置&#xff1f;这个配置保存在哪个文件&#xff1f;文件在哪里&a…

二叉树10:二叉树的最小深度

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a;111. 二叉树的最小深度 题目&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近…

Asp.Net Core实现最基本的Http服务

概述 和.NetFramework时代不同&#xff0c;Core是可以自承载的&#xff0c;也就说开发好的Web项目&#xff0c;可以打包成exe直接运行的&#xff0c;而不必放到IIS这样的环境中。接下来&#xff0c;我们写点代码&#xff0c;体验一下Asp.Net Core自带的Http功能。 初体验 所谓…

嵌入式微功耗RTU的功能与特点介绍、技术参数详情

平升电子嵌入式微功耗RTU&#xff0c;可灵活嵌入至各类仪表、传感器和工业设备中&#xff0c;定时采集设备数据并通过4G/5G/NB-IoT远传至监管软件&#xff0c;实现设备联网。 嵌入式微功耗RTU设计小巧、方便集成&#xff0c;微功耗运行&#xff0c;支持标准水资源/水文/环保/M…

Biotin-PEG-AC,Biotin-PEG-Acrylate,生物素PEG丙烯酸酯线性杂双功能PEG试剂

英文名称&#xff1a;Biotin-PEG-AC&#xff0c;Biotin-PEG-Acrylate 中文名称&#xff1a;生物素-聚乙二醇-丙烯酸酯 生物素-聚乙二醇-丙烯酸酯是一种含有生物素和丙烯酸酯的线性杂双功能聚乙二醇试剂。它是一种有用的带有PEG间隔基的交联或生物结合试剂。生物素能与亲和素和…

智创万物,数赢未来——如何助推数智时代的发展浪潮

数智化核心特征 可视化 消费者的行为可以看得见&#xff0c;生产者的行为也可以看得见。产业互联网或者消费互联网非常重要的一点就是要对消费者行为和生产者行为的可视化&#xff0c;其背后是数字化的力量。 可量化 可量化意味着企业家可以对管理流程进行改造&#xff0c;…

echarts的legend——图例样式的配置

认识图例&#xff1a; 以上几张图表中&#xff0c;红色圆圈部分即图例 echarts图表中的图例&#xff0c;有形状&#xff0c;颜色&#xff0c;位置等等各种样式的不同配置。 echarts官网配置项手册里有非常详细的内容&#xff0c;我们挑几种常用的看看&#xff0c;加深对legend属…

深度学习——物体检测算法:R-CNN,SSD,YOLO(笔记)

一&#xff0c;R-CNN 1.区域卷积神经网络R-CNN 首先从输入图像中提取若干个锚框&#xff0c;并标注好它们的类别和偏移量。然后用卷积神经网络对每一个锚框进行前向传播抽取特征。最后用每个提议区域的特征来预测类别和边界框。 ①使用启发式搜索算法来选择锚框 ②使用预训练…

【第一周学习——认识 O(N*logN) 的排序[ 归并排序 、堆排序、快速排序 ]

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;《数据结构与算法》 &#x1f4e7;如果文章知识点有错误的地方&a…

力扣(LeetCode)187. 重复的DNA序列(C++)

哈希表 直观思考&#xff0c;由于限定了答案长度 101010 &#xff0c;只需要一次遍历字符串&#xff0c;统计所有长度为 101010 的子串的出现次数(哈希表) &#xff0c;最后遍历哈希表&#xff0c;维护答案&#xff0c;记录出现 222 次(及以上)的字符串 。 class Solution { …

【BBuf的CUDA笔记】二,解析 OneFlow BatchNorm 相关算子实现

0x1. 前言 在ResNet中&#xff08;https://github.com/pytorch/vision/blob/main/torchvision/models/resnet.py&#xff09;&#xff0c;关于BatchNorm的调用一共有两种模式&#xff0c;第一种是ReLU接在BN之后&#xff1a; out self.bn1(out) out self.relu(out)另外一种…

MicFunPred——最新16S rRNA扩增子数据功能预测数据库

近年来&#xff0c;基于扩增子测序进行物种的功能预测是研究微生物群落功能的主要方面&#xff0c;目前最常用的软件包括Tax4Fun以及PICRUSt2。关于这两款软件的使用方法详可参见凌波微课|扩增子研究第十六讲&#xff1a;扩增子测序结果中的物种功能预测。 Tax4Fun使用最近邻匹…

2022年终总结-两年Androider的成长之路

金句分享 生活金句 1.可难道我们生命中做的每一件事不都是为了被爱得更多一点吗 2.这不只是一种对承诺的恐惧&#xff0c;也不是我缺乏关心和爱的能力&#xff0c;因为我做得到&#xff0c;只不过&#xff0c;老老实实讲。我想 我宁愿为了某件我擅长的事&#xff0c;我能表现…

一个select死锁问题

以下代码的输出结果&#xff1a; func main() {var wg sync.WaitGroupfoo : make(chan int)bar : make(chan int)wg.Add(1)go func() {defer wg.Done()select {case foo <- <-bar:default:println("default")}}()wg.Wait() }结果 解析 对于 select 语句&#…

【Linux】进程信号

目录 一、什么是信号 二、信号产生的条件 1、键盘产生 2、进程异常 3、命令产生 4、软件条件 三、信号保存的方式 四、信号处理的方式 1、信号处理接口 2、信号处理时机 3、进程为什么要切换成为用户态才进行信号的捕获方法&#xff1f; 4、sigaction 五、可重入函…