【数据库】七、数据库安全与保护
七、数据库安全与保护
文章目录
- 七、数据库安全与保护
- 安全性
- 访问控制
- 数据库安全性控制
- 用户标识和鉴别
- 存取控制
- 自主存取控制(DAC)
- 存取控制方法:授权与回收
- GRANT授权
- REVOKE回收
- 强制存取控制(MAC)
- MySQL的安全设置
- 用户管理
- 1.创建登录用户
- 2.修改用户密码
- 3.修改用户名
- 4.删除用户
- 权限管理
- 1.授予权限grant
- 2.撤销权限revoke
- 小结:SQL灵活的授权机制
- 角色管理
- 备份与恢复
- 审计
问题的提出:
数据库的一大特点是数据可以共享
数据共享必然带来数据库的安全性问题
数据库系统中的数据共享不能是无条件的共享
数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
系统安全保护措施是否有效是数据库系统主要的性能指标之一。
安全性
计算机系统存在技术安全、管理安全和政策法律三类安全性问题。
TCSEC/TDI 标准由安全策略、责任、保证和文档四个方面内容构成。
数据库的安全性是指保护数据库,防止不合法的使用,以免数据的泄露、更改或破坏。
数据库的安全性和完整性这两个概念听起来有些相似,有时容易混淆,但两者是完全不同的。
- 安全性:保护数据以防止非法用户故意造成的破坏,确保合法用户做其想做的整改。
- 完整性:保护数据以防止合法用户无意中造成的破坏,确保用户所做的事情是正确的。
两者不同的关键在于“合法”和“非法”及“故意”与“无意”。
数据库的不安全因素:
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境的脆弱性
为了保护数据库,防止故意的破坏,可以从低到高的5个级别上设置各种安全措施。
- 物理控制:
计算机系统的机房和设备应加以保护,通过加锁或专门监护等防止系统场地被非法进入,从而进行物理破坏。 - 法律保护:
通过立法、规章制度防止授权用户以非法形式将其访问数据库的权限转授给非法者。 - 操作系统支持:
无论数据库系统是多么安全,操作系统的安全弱点均可能成为入侵数据库的手段,应防止未经授权的用户从操作系统处着手访问数据库。 - 网络管理:
由于大多数DBMS都允许用户通过网络进行远程访问,所以网络软件内部的安全性是很重要的。 - DBMS实现:
DBMS安全机制的职责是检查用户的身份是否合法及使用数据库的权限是否正确。
计算机系统安全模型:
- 系统根据用户标识鉴定用户身份,合法用户才准许进入计算机系统
- 数据库管理系统还要进行存取控制,只允许用户执行合法操作
- 操作系统有自己的保护措施
- 数据可以以密码形式存储到数据库中
数据库安全性控制的常用方法:
- 用户标识和鉴定
- 存取控制
- 视图
- 审计
- 数据加密
访问控制
- 用户账号管理
- 账户权限管理
数据库安全性控制
首先,数据库管理系统对提出SQL访问请求的数据库用户进行身份鉴别,防止不可信用户使用系统。
然后,在SQL处理层进行自主存取控制和强制存取控制,进一步可以进行推理控制。
还可以对用户访问行为和系统关键操作进行审计,对异常用户行为进行简单入侵检测。
用户标识和鉴别
用户身份鉴别(Identification & Authentication)
- 系统提供的最外层安全保护措施
- 用户标识:由用户名和用户标识号组成(用户标识号在系统整个生命周期内唯一)
用户标识和鉴别方法:
- 静态口令鉴别
静态口令一般由用户自己设定,这些口令是静态不变的。 - 动态口令鉴别
口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法。 - 生物特征鉴别
通过生物特征进行认证的技术,生物特征如指纹、虹膜和掌纹等。 - 智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。
存取控制
存取控制策略:
数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接触数据,这主要通过数据库系统的存取控制策略来实现。
存取控制机制组成:
- 定义用户权限,并将用户权限登记到数据字典中
用户对某一数据对象的操作权力称为权限
DBMS提供适当的语言来定义用户权限,存放在数据字典中,称做安全规则或授权规则。 - 合法权限检查
用户发出存取数据库操作请求
DBMS查找数据字典,进行合法权限检查。
用户权限定义和合法权检查机制一起组成了数据库管理系统的存取控制子系统。
常用存取控制方法包括**自主存取控制(DAC)和强制存取控制(MAC)**两种。
- 自主存取控制(Discretionary Access Control ,简称 DAC)
用户对不同的数据对象有不同的存取权限
不同的用户对同一对象也有不同的权限
用户还可将其拥有的存取权限转授给其他用户 - 强制存取控制(Mandatory Access Control,简称 MAC)
每一个数据对象被标以一定的密级
每一个用户也被授予某一个级别的许可证
对于任意一个对象,只有具有合法许可证的用户才可以存取
自主存取控制(DAC)
自主存取控制(DAC)的 SQL 语句包括 GRANT 和 REVOKE 两个。
用户权限由数据对象和操作类型两部分构成。
定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作。
定义存取权限称为授权。
权限类型:
自主存取控制的权限类型分为两种,即角色权限和数据库对象权限。
- 角色权限:
给角色授权,并为用户分配角色,用户的权限为其角色权限之和。角色权限由DBA授予。 - 数据库对象权限:
不同的数据库对象,可提供给用户不同的操作。该权限由DBA或该对象的所有者(Owner)授予用户。
存取控制方法:授权与回收
定义一个用户的存取权限就是要定义这个用户可以在哪些数据对象上进行哪些类型的操作。在数据库系统中,定义存取权限成为授权。
GRANT授权
grant <> [,<>]...
on <对象类型> <对象名> [,<对象类型> <对象名>]...
to <用户> [,<用户>]...
[with grant option]
将对指定操作对象的指定操作权限授予指定的用户,发出该grant语句的可以是DBA,也可以是已经拥有该权限的用户。接收权限的用户可以是一个或多个具体用户,也可以是PUBLIC,即全体用户。指定WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限授权给其他用户.
grant all privileges
on table student,sc
to user1
with grant option;
REVOKE回收
revoke <> [,<>]...
on <对象类型> <对象名> [,<对象类型> <对象名>]...
from <用户> [,<用户>]...
cascade会级联:依次向下收回权限
revoke insert
on table student
from user1 cascade;
创建数据库模式的权限
create user <username>
[with] [dba|resource|connect]
强制存取控制(MAC)
自主存取能够通过授权机制有效地控制对敏感数据的存取,但它存在一个漏洞——一些别有用心的用户可以欺骗一个授权用户,采用一定的手段来获取敏感数据。
例如,领导Manager是客户单Customer关系的物主,他将“读”权限授予用户A,且A不能再将权限转授他人,其目的是让A审查客户信息,看有无错误。现在A自己另外创建一个新关系A_Customer,然后将自Customer读取的数据写入(即复制到)A_Customer。这样,A是A_Customer的物主,他可以做任何事情,包括再将其权限转授给任何其他用户。
存在这种漏洞的根源在于,自主存取控制机制仅以授权将用户(主体)与被存取数据对象(客体)关联,通过控制权限实现安全要求,对用户和数据对象本身未做任何安全性标注。强制存取控制就可以处理自主存取控制的这种漏洞。
强制存取控制(MAC):
- 保证更高程度的安全性
- 用户不能直接感知或进行控制
- 适用于对数据有严格而固定密级分类的部门
- 军事部门
- 政府部门
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类。
- 主体是系统中的活动实体
- 数据库管理系统所管理的实际用户
- 代表用户的各进程
- 客体是系统中的被动实体,受主体操纵
- 文件、基本表、索引、视图
敏感度标记(Label)
对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)
敏感度标记分成若干级别:
- 绝密(Top Secret,TS)
- 机密(Secret,S)
- 可信(Confidential,C)
- 公开(Public,P)
- TS>=S>=C>=P
主体的敏感度标记称为许可证级别(Clearance Level)
客体的敏感度标记称为密级(Classification Level)
强制存取控制规则:
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。
- 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据都是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
强制存取控制的优点是系统能执行“信息流控制”。
【注意】这种方法在通用数据库系统中不是十分有用,它只在某些专用系统中有用,例如军事部门或政府部门。
MySQL的安全设置
MySQL安全设置用于实现“正确的人”能够“正确的访问”“正确的数据库资源”。
MySQL通过两个模块实现数据库资源的安全访问控制,即身份认证模块和权限验证模块。
- 身份认证模块:用于实现数据库用户在某台登录主机的身份认证,只有通过身份认证的数据库用户才能登录主机并成功连接到MySQL服务器,继而向MySQL服务器发送MySQL命令或SQL语句;
- 权限验证模块:用于验证MySQL账户是否有权执行该MySQL命令或SQL语句,确保“数据库资源”被真确地访问或者执行。
用户管理
1.创建登录用户
创建用户的语法形式如下:
CREATE USER 用户 [IDENTIFIED BY [PASSWORD] '密码'] [,用户 [IDENTIFIED BY [PASSWORD] '密码']]…;
【说明】:
- 用户的格式:用户名@主机名。其中,主机名指定了创建的用户使用MySQL连接的主机。另外,“%”表示一组主机,localhost表示本地主机。
- IDENTIFIED BY子句指定创建用户时的密码。如果密码是一个普通的字符串,则不需要使用PASSWORD关键字。
-- 【例12-1】创建用户tempuser,其口令为temp。
CREATE USER tempuser@localhost IDENTIFIED BY 'temp';
创建的新用户的详细信息自动保存在系统数据库mysql的user表中,执行如下SQL语句,可查看数据库服务器的用户信息。
USE mysql;
SELECT * FROM user;
2.修改用户密码
修改用户密码的语法形式如下:
SET PASSWORD FOR 用户= '新密码';-- 【例12-2】修改用户tempuser的密码为abc。
SET PASSWORD FOR tempuser@localhost='abc';
3.修改用户名
修改用户名的语法形式如下:
RENAME USER 旧用户名 To 新用户名 [ ,旧用户名 To 新用户名] [...]-- 【例12-3】修改普通用户tempuser的用户名为temp_U。
RENAME USER tempuser@localhost TO temp_U@localhost;
4.删除用户
使用DROP USER语句可删除一个或多个MySQL用户,并取消其权限。
其语法形式如下:
DROP USER 用户[,…];-- 【例12-5】删除用户temp_U。
DROP USER temp_U@localhost;
权限管理
权限管理主要是对登录到MySQL服务器的数据库用户进行权限验证。所有用户的权限都存储在MySQL的权限表中。
合理的权限管理能够保证数据库系统的安全,不合理的权限设置会给数据库系统带来危害。
权限管理主要包括两个内容,即授予权限和撤销权限。
1.授予权限grant
GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
语义:将对指定操作对象的指定操作权限授予指定的用户
发出GRANT:
- 数据库管理员
- 数据库对象创建者(即属主Owner)
- 拥有该权限的用户
接受权限的用户:
- 一个或多个具体用户
- PUBLIC(即全体用户)
WITH GRANT OPTION子句:
- 指定:可以再授予
- 没有指定:不能传播
不允许循环授权
-- 【例】把查询Student表权限授给用户U1。
USE jwgl13;
CREATE USER U1@localhost IDENTIFIED BY '123456';
GRANT SELECT
ON TABLE Student
TO U1@localhost;#创建用户并授权后,为了使其生效,输入命令:
FLUSH PRIVILEGES;
2:
-- 【例】把对Student表的全部权限授予用户U2和U3。
USE jwgl13;
CREATE USER U2@localhost IDENTIFIED BY '123456';
CREATE USER U3@localhost IDENTIFIED BY '123456';GRANT ALL PRIVILEGES
ON TABLE Student
TO U2@localhost,U3@localhost;
FLUSH PRIVILEGES;
2.撤销权限revoke
授予的权限可以由数据库管理员或其他授权者用REVOKE语句收回。
REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
例:
-- 【例】把用户U1查询student表的权限收回。
REVOKE SELECT
ON TABLE student
FROM U1@localhost;-- 【例】把用户U4修改学生姓名的权限收回。
REVOKE UPDATE(Sname)
ON TABLE Student
FROM U4@localhost;-- 【例】收回所有用户对表Score的查询权限。
REVOKE SELECT
ON TABLE Score
FROM PUBLIC;-- 【例】把用户U5对Score表的INSERT权限收回。
REVOKE INSERT
ON TABLE Score
FROM U5@localhost;
小结:SQL灵活的授权机制
数据库管理员:
拥有所有对象的所有权限
根据实际情况不同的权限授予不同的用户
用户:
拥有自己建立的对象的全部的操作权限
可以使用GRANT,把权限授予其他用户
被授权的用户:
如果具有“继续授权”的许可,可以把获得的权限再授予其他用户
所有授予出去的权力在必要时又都可用REVOKE语句收回。
角色管理
数据库角色:被命名的一组与数据库操作相关的权限。
- 角色是权限的集合
- 可以为一组具有相同权限的用户创建一个角色
- 简化授权的过程
1.角色的创建
CREATE ROLE <角色名>
2.给角色授权
GRANT <权限>[,<权限>]… ON <对象类型>对象名 TO <角色>[,<角色>]…
3.将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
- 该语句把角色授予某用户,或授予另一个角色;
- 授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION;
- 指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限授予其他角色。
一个角色的权限:直接授予这个角色的全部权限加上其他角色
授予这个角色的全部权限。
4.角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
- 用户可以回收角色的权限,从而修改角色拥有的权限。
- REVOKE执行者是角色的创建者
- 拥有在这个(些)角色上的ADMIN OPTION
5.删除角色
语法形式如下:
DROP ROLE角色[,角色,…];
例
-- 【例】通过角色来实现将一组权限授予一组用户。
-- 步骤如下:-- (1)首先创建一个角色 R1
USE jwgl13;
CREATE ROLE R1@localhost;
-- (2)然后使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限。
GRANT SELECT, UPDATE, INSERT
ON TABLE Student
TO R1@localhost;
-- (3)创建用户U_A、U_B、U_C
CREATE USER U_A@localhost IDENTIFIED BY '111111';
CREATE USER U_B@localhost IDENTIFIED BY '111111';
CREATE USER U_C@localhost IDENTIFIED BY '111111';
-- (4)将这个角色授予U_A、U_B、U_C,使他们具有角色R1所包含的全部权限。
GRANT R1@localhost
TO U_A@localhost,U_B@localhost,U_C@localhost;-- 验证角色是否正确分配,可使用SHOW GRANTS语句:
SHOW GRANTS FOR U_A@localhost
USING R1@localhost;-- 注意:用户在使用角色权限前必须激活角色,命令形式如下:
SET GLOBAL activate_all_roles_on_login=ON;-- (5)可以一次性通过R1来回收U_A的这3个权限
REVOKE R1@localhost FROM U_A@localhost;
例2
-- 【例】角色的权限修改。
-- 使角色R1在原来的基础上增加了Student表的DELETE 权限。
GRANT DELETE
ON TABLE Student
TO R1@localhost;-- 【例】收回R1的SELECT权限。
REVOKE SELECT
ON TABLE Student
FROM R1@localhost; -- 【例】删除角色。
DROP ROLE R1@localhost;
备份与恢复
导出一整个数据库:
C:\WINDOWS\system32> mysqldump -u 用户名 -p 数据库名 > 导出的文件名C:\WINDOWS\system32> mysqldump -u root -p user > d:\demo.sql
导出一张表:
C:\WINDOWS\system32> mysqldump -u 用户名 -p 数据库名 表名称 > 导出的文件名
C:\WINDOWS\system32> mysqldump -u root -p user user_1 > d\demo.sql
恢复:
数据的回复必须要先登录,登录成功后新建一个数据库,进入到指定的数据库中执行如下命令
mysql> Source 脚本目录(绝对路径)
mysql> Source C:\java\demo.sql
审计
- 审计功能把用户对数据库的所有操作自动记录下来放入审计日记中。DBA可以利用审计跟踪的信息,重现导致数据库出现现有状况的一系列事件,中出非法存取数据的人、时间和内容等。
- 审计通常是费时间和空间的,一般主要用于安全性要求较高的部门。
- 审计一般可以分为用户级审计和系统级审计。
- AUDIT语句用来设置审计功能,NOAUDIT用来取消审计功能。
audit alter,update
on student;noaudit all
on student;
相关文章:
【数据库】七、数据库安全与保护
七、数据库安全与保护 文章目录 七、数据库安全与保护安全性访问控制数据库安全性控制用户标识和鉴别存取控制自主存取控制(DAC)存取控制方法:授权与回收GRANT授权REVOKE回收 强制存取控制(MAC) MySQL的安全设置用户管理1.创建登录用户2.修改用户密码3.修改用户名4.…...

卡尔曼滤波-剔除异常值的影响
二郎在看论文的时候,发现了一个针对卡尔曼滤波过程中,测量向量出现误差导致滤波发散的处理方法。 该方法也可以扩展到其他问题中使用,所以二郎在这里写一下。 论文原文:https://www.mdpi.com/1424-8220/20/17/4710 论文翻译对应…...

Java程序之动物声音“模拟器”
题目: 设计一个“动物模拟器”,希望模拟器可以模拟许多动物的叫声和行为,要求如下: 编写接口Animal,该接口有两个抽象方法cry()和getAnimalName(),即要求实现该接口的各种具体的动物类给出自己的叫声和种类…...
jieba中文分词器的使用
Jieba 是一个中文分词的第三方库,主要用于对中文文本进行分词。分词是将文本分割成一个个词语的过程,这在中文文本处理中尤为重要,因为中文不像英文那样有明显的空格来分隔词语。Jieba 的分词算法可以实现精确分词、全模式分词和搜索引擎模式…...
【杂记-浅谈OSPF协议中的RouterDeadInterval】
OSPF协议中的RouterDeadInterval 一、RouterDeadInterval概述二、设置RouterDeadInterval三、RouterDeadInterval的重要性 一、RouterDeadInterval概述 RouterDeadInterval,即路由器死区间隔,它涉及到路由器如何在广播网络上发现和维护邻居关系。Router…...

Django 模版变量
1,模版变量作用 模板变量使用“{{ 变量名 }}” 来表示模板变量前后可以有空格,模板变量名称,可以由数字,字母,下划线组成,不能包含空格模板变量还支持列表,字典,对象 2,…...

【数据结构与算法】图的存储(邻接矩阵,邻接表)详解
图的邻接矩阵数据结构 typedef enum { NDG, DG, NDN, DN } GraphKind;using VRType int; using InfoType int;typedef struct ArcCell {VRType adj;InfoType *info; } Arc[N][N];struct MGraph {ElemType vexs[N];Arc arc;int vexnum, arcnum;GraphKind kind; };ArcCell 结构…...
【深度C++】之“类与结构体”
0. 抽象数据类型 类(class) 和结构体(struct) 都是C中的自定义数据类型,是使用C实现面向对象编程思想的起点。 类的基本思想是数据抽象(data abstraction) 和封装(encapsulation&a…...

CTO的职责是什么?
看《架构思维》作者是这样讲的: CTO 到底是做什么的? 我当下的答案是:“CTO 就是一个从技术视角出发,为公司或者所在的部门做正确决策的 CEO。”怎么理解这句话呢?作为一个 CTO,其长期目标和决策优先级与…...

【GD32】从零开始学兆易创新32位微处理器——RTC实时时钟+日历例程
1 简介 RTC实时时钟顾名思义作用和墙上挂的时钟差不多,都是用于记录时间和日历,同时也有闹钟的功能。从硬件实现上来说,其实它就是一个特殊的计时器,它内部有一个32位的寄存器用于计时。RTC在低功耗应用中可以说相当重要…...

HTTP网络协议
1.HTTP (1)概念: Hyper Text Transfer Protocol,超文本传输协议规定了浏览器和服务器之间数据传输的规则。 (2)特点 基于TCP协议:面向连接,安全基于请求-响应模型的:一次请求对应一次响应HTTP协…...

Kubernetes相关生态
1、Prometheus、Metrics Server与Kubernetes监控体系 简介: Prometheus 项目与 Kubernetes 项目一样,也来自于 Google 的 Borg 体系,它的原型系统,叫作 BorgMon,是一个几乎与 Borg 同时诞生的内部监控系统 Pro…...

C语言入门4-函数和程序结构
函数举例 读取字符串,如果字符串中含有ould则输出该字符串,否则不输出。 #include <stdio.h>// 函数声明 int getLine(char s[], int lim); int strindex(char s[], char t[]);int main() {char t[] "ould"; // 要查找的目标子字符串…...

分行业二氧化碳排放数据
分行业二氧化碳排放量 资源名称:分行业二氧化碳排放量 数据来源:中国能源统计年鉴 时间范围:1995-2018年指标:八类能源和总量:煤炭、焦炭、原油、汽油、煤油、柴油、燃料油、天然气...

【OS基础】符合AUTOSAR标准的RTAOS-Alarms详解
目录 前言 正文 7.报警Alarms 7.1配置Alarms 7.1.1激活一个任务 7.1.2 设置一个事件 7.1.3报警回调Alarm Callback 7.1.4 增加计数器值 7.2设置Alarms 7.2.1 绝对Alarms 7.2.2 相对Alarm 7.3自启动Alarms 7.4 删除Alarms 7.5确认何时会发生Alarm 7.6非周期Alarm…...

基于Java的学生成绩管理系统
你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java技术,B/S结构 工具:MyEclipse,MySQL 系统展示 首页 个人中…...

都2024年了,还有人不懂动态代理么?
文章目录 一、定义二、静态代理三、动态代理1. JDK代理1.1 JDK代理实现流程1.2 动态生成的类字节码 2. Cglib代理2.1 Cglib实现流程 四、总结 一、定义 静态代理和动态代理都反映了一个代理模式,代理模式是一种经典的设计模式,常用于为其他对象提供一种…...

ARM功耗管理框架之PPU
安全之安全(security)博客目录导读 思考:功耗管理框架?SCP?PPU?LPI?之间的关系?如何配合? 目录 一、功耗管理框架中的PPU 二、PPU的结构与连接关系 三、PPU操作模式和电源模式及其之间的转…...

说说 SSL 的错误认识和不足之处
最近明月在学习折腾 LNMP 期间无意中建了一个 Typecho 的博客小站,近一周的折腾下来,收获真的不少,致使兴趣也越来越浓了,在升级 LNMP 的时候捎带手的给这个 Typecho 博客也启用了 SSL。并且开启了 memcached 和 OPcache 优化加速…...

Go语言day1
下载go语言的安装程序: All releases - The Go Programming Language 配置go语言的环境变量: 写第一个go语言 在E:\go_workspace当前窗口使用cmd命令: 输入 go run test.go...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...