【MySQL精通之路】InnoDB静态数据加密(13)

目录

1.关于静止数据加密

2.加密先决条件

3.为库和通用表空间定义加密默认值

4.FPT表空间加密

5.通用表空间加密

6.Doublewrite文件加密

7.mysql系统表空间加密

8.redolog日志加密

9.undolog日志加密

10.主密钥轮转

11.加密和恢复

12.导出加密的表空间

13.加密和复制

14.识别加密的表空间和库

15.监视加密进度

16.加密使用说明

17.加密限制


InnoDB支持按FPT表空间通用表空间、mysql系统表空间redolog日志undolog日志的静态数据加密。

从MySQL 8.0.16开始,还支持为通用表空间设置加密默认值,这允许DBA控制在这些库和表空间中创建的表是否加密。

InnoDB静态数据加密特性功能在本节的以下主题中进行了描述。

1.关于静止数据加密

InnoDB使用两层加密密钥体系结构,由主加密密钥表空间密钥组成。

当表空间被加密时,表空间密钥被加密并存储在表空间头中。

当应用程序或经过身份验证的用户想要访问加密的表空间数据时,InnoDB使用主加密密钥来解密表空间密钥

表空间密钥的解密版本永远不会更改,但可以根据需要更改主加密密钥。此动作称为主钥匙轮转

静止数据加密功能依赖于用于主加密密钥管理的密钥环组件插件

所有MySQL版本都提供component_keyring_file组件keyring-file插件,每个插件都将keyring数据存储在服务器主机的本地文件中。

MySQL Enterprise Edition提供了额外的密钥环组件和插件:

component_keyring_encrypted_file:将密钥环数据存储在服务器主机本地的加密、受密码保护的文件中。

keyring_encrypted_file:将密钥环数据存储在服务器主机本地的加密、受密码保护的文件中。

keyring_okv:一个与KMIP兼容的后端keyring存储产品一起使用的KMIP 1.1插件。支持的KMIP兼容产品包括集中式密钥管理解决方案,如Oracle key Vault、Gemalto KeySecure、Thales Vormetric密钥管理服务器和Fornetix key Orchestration

keyring_aws:作为密钥生成的后端与Amazon Web Services密钥管理服务(aws KMS)通信,并使用本地文件进行密钥存储。博主PS:阿里云等同类厂商有相同KMS产品可以选购~

keyring_hashicorp:与hashicorp Vault通信以进行后端存储。


警告:

对于加密密钥管理,component_keyring_filecomponent_keyring_encrypted_file组件,以及keyring_filekeyring_encryptod_file插件不是法规遵从性解决方案。

PCI、FIPS等安全标准要求使用密钥管理系统来保护管理保护密钥库硬件安全模块(HSM)中的加密密钥。

安全可靠的加密密钥管理解决方案对于安全性和遵守各种安全标准至关重要。当静态数据加密功能使用集中式密钥管理解决方案时,该功能被称为“MySQL企业透明数据加密(TDE)”。

静态数据加密功能支持基于高级加密标准(AES)块的加密算法。它使用电子代码簿(ECB)块加密模式进行表空间密钥加密,使用密码块链接(CBC)块加密方式进行数据加密

有关静态数据加密功能的常见问题,

请参阅“MySQL 8.0常见问题解答:InnoDB静止数据加密”。

2.加密先决条件

必须在启动时安装和配置密钥环组件或插件。早期加载可确保组件或插件在初始化InnoDB存储引擎之前可用。

有关密钥环的安装和配置说明,请参阅“MySQL密钥环”。

说明显示了如何确保所选组件或插件处于活动状态。

一次只能启用一个密钥环组件或插件不支持启用多个密钥环组件或插件,结果可能与预期不同。

重要:

一旦在MySQL实例中创建了加密的表空间,创建加密表空间时加载的密钥环组件或插件必须在启动时继续加载。如果不这样做,则会在启动服务器和InnoDB恢复期间导致错误。

加密生产数据时,请确保采取措施防止丢失主加密密钥。如果主加密密钥丢失,则存储在加密表空间文件中的数据是不可恢复的。如果使用component_keyring_filecomponent_keyring_encrypted_file组件,或者使用keyring_filekeyring_encryptod_file插件,请在创建第一个加密表空间之后、主密钥轮转之前和主密钥轮转之后立即创建密钥环数据文件的备份

对于每个组件,其配置文件指示数据文件的位置。keyring_file_data配置选项定义keyring_file插件的keyring数据文件位置

keyring_encrypted_file_data配置选项定义keyring_ncrypted_file插件的keyring数据文件位置

如果使用keyring_okvkeyring_aws插件,请确保执行了必要的配置。

有关说明,请参阅“MySQL密钥环”。

3.为库和通用表空间定义加密默认值

从MySQL 8.0.16开始,default_table_encryption系统变量定义了库和常规表空间的默认加密设置

当未显式指定encryption子句时,CREATE TABLESPACECREATE SCHEMA操作将应用default_table_encryption设置。

ALTER SCHEMAALTER TABLESPACE操作不应用default_table_encryption设置。

必须显式指定ENCRYPTION子句才能更改现有通用表空间的加密。

default_table_encryption变量可以为单个客户端连接设置,也可以使用SET语法全局设置。例如,以下语句全局启用默认库表空间加密

mysql> SET GLOBAL default_table_encryption=ON;

在创建或更改库时,也可以使用default encryption子句定义库的默认加密设置,如本例所示:

mysql> CREATE SCHEMA test DEFAULT ENCRYPTION = 'Y';

如果在创建库时未指定DEFAULT ENCRYPTION子句,则应用DEFAULT_TABLE_ENCRYPTION设置。必须指定DEFAULT ENCRYPTION子句才能更改现有库的默认加密。否则,库将保留其当前的加密设置。

默认情况下,表继承在其中创建的常规表空间的加密设置。

例如,在启用加密的库中创建的表默认情况下是加密的。这种行为使DBA能够通过配置库和通用表空间加密默认值来控制表加密的使用。

加密默认值是通过启用 table_encryption_privilege_check系统变量来强制应用的。

启用table_encryption_privilege_check后,在创建或更改加密设置与default_table_encryption设置不同的通用表空间时,或者在创建或修改加密设置默认库加密不同的时,将进行权限检查。

禁用table_encryption_privilege_check(默认设置)时,不会进行权限检查,并且允许前面提到的操作继续进行并发出警告。

启用table_encryption_privilege_check时,需要TABLE_ENCRYPTION_ADMIN权限来覆盖默认加密设置。

DBA可以授予此权限,使用户在创建或更改库或通用表空间时可以修改default_table_encryption设置,或者在创建或修改表时可以设置默认模式加密。

在创建或更改表时,此权限不允许设置通用表空间的加密。必须具有与其所在的通用表空间相同的加密设置。

4.FPT表空间加密

从MySQL 8.0.16开始,除非在CREATE TABLE语句中显式指定了encryption子句,否则每个表空间的文件将继承创建表的库的默认加密。

在MySQL 8.0.16之前,必须指定ENCRYPTION子句才能启用加密。

mysql> CREATE TABLE t1 (c1 INT) ENCRYPTION = 'Y';

 要更改每个表空间现有文件的加密,必须指定encryption子句。

mysql> ALTER TABLE t1 ENCRYPTION = 'Y';

从MySQL 8.0.16开始,如果启用了table_encryption_privilege_check变量,则使用与默认库加密不同的设置,指定encryption子句需要TABLE_ENCRYPTION_ADMIN 权限。

请参阅第三节 为库和通用空间定义加密默认值。

5.通用表空间加密

从MySQL 8.0.16开始,default_table_encryption变量决定新创建的通用表空间的加密,除非在CREATE tablespace语句中显式指定了encryption子句。在MySQL 8.0.16之前,必须指定ENCRYPTION子句才能启用加密。

mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' ENCRYPTION = 'Y' Engine=InnoDB;

要更改现有通用表空间的加密,必须指定encryption子句。

mysql> ALTER TABLESPACE ts1 ENCRYPTION = 'Y';

从MySQL 8.0.16开始,如果启用了table_encryption_privilege_check变量,则使用与default_table_encryption设置不同的设置指定encryption子句需要TABLE_ENCRYPTION_ADMIN 权限。请参阅为库和通用表空间定义加密默认值。

6.Doublewrite文件加密

从MySQL 8.0.23开始提供对双写文件的加密支持。InnoDB会自动加密属于加密表空间的双写文件页。无需执行任何操作。双写文件页使用关联表空间加密密钥进行加密。写入表空间数据文件的同一加密页写入双写文件。属于未加密表空间双写文件页保持未加密状态

在恢复过程中,加密的双写文件页将解密并检查是否损坏

7.mysql系统表空间加密

mysql 8.0.16版本提供了对mysql系统表空间的加密支持。

mysql系统表空间包含mysql系统数据库mysql数据字典表

默认情况下,它是未加密的。要对mysql系统表空间启用加密,请在ALTER tablespace语句中指定表空间名称和encryption选项。

mysql> ALTER TABLESPACE mysql ENCRYPTION = 'Y';

若要禁用mysql系统表空间的加密,请使用ALTER tablespace语句将encryption设置为'N'。

mysql> ALTER TABLESPACE mysql ENCRYPTION = 'N';

启用或禁用mysql系统表空间的加密需要对实例中的所有表具有CREATE tablespace权限(*.*上的CREATE TABLESSPACE)。

8.redolog日志加密

使用innodb_Redo_log_encrypt配置选项启用重做日志数据加密。redolog日志加密默认情况下处于禁用状态。

表空间数据一样,当将redolog日志数据写入磁盘时,会对redolog日志数据进行加密。

当从磁盘读取redolog日志数据时,会进行解密。一旦redolog日志数据被读取到内存中,它就会以未加密的形式出现。

redolog日志数据会使用表空间加密密钥进行加密和解密。

当innodb_redo_log_encrypt被启用时,磁盘上存在的未加密redolog日志页保持未加密状态,并且新的redolog日志页以加密的形式写入磁盘。

同样,当innodb_redo_log-encrypt处于禁用状态时,磁盘中存在的加密重做日志页面保持加密状态,而新的redolog日志记录页以未加密的形式被写入磁盘

从MySQL 8.0.30中,redolog日志加密元数据,包括表空间加密密钥,存储在具有最新检查点LSN的redolog日志文件的头中。

在MySQL 8.0.30之前,redolog日志加密元数据,包括表空间加密密钥,存储在第一个redolog日志文件(ib_logfile0)的头中。如果删除了包含加密元数据的redolog日志文件,则会禁用redolog日志加密。

一旦启用了redolog日志加密,就不可能在没有密钥环组件插件没有加密密钥的情况下正常重启,因为InnoDB必须能够在启动期间扫描重做页面,如果redolog日志页面被加密,这是不可能的。如果没有密钥环组件或插件或加密密钥,则只能在没有redolog日志(SRV_FORCE_NO_LOG_redo)的情况下强制启动。

请参阅“强制InnoDB恢复”。

9.undolog日志加密

使用innodb_undo_log_encrypt配置选项启用撤消日志数据加密。

undolog日志加密适用于位于undolog表空间中的undolog日志。

参见“undolog表空间”。

默认情况下,“undolog日志数据加密”处于禁用状态。

与表空间数据一样,当将undolog日志数据写入磁盘时,会对undolog日志数据进行加密,当从磁盘读取undolog日志数据时,会进行解密。

一旦undolog日志数据被读取到内存中,它就会以未加密的形式出现。undolog日志数据会使用表空间加密密钥进行加密和解密。

启用innodb_undo_log_encrypt时,磁盘上未加密的undolog日志页将保持未加密状态,并且新的undolog日志页面将以加密的形式写入磁盘。

同样,禁用innodb_endo_log_encorypt后,磁盘上已加密的undolog记录页将保持加密状态,而新的undolog记录页面将以未加密的方式写入磁盘。

撤消日志加密元数据,包括表空间加密密钥,存储在撤消日志文件的头中。

10.主密钥轮转

主加密密钥应定期轮换,只要怀疑密钥已被泄露。

主密钥旋转是一种原子级实例级操作

每次轮换主加密密钥时,MySQL实例中的所有表空间密钥都会重新加密并保存回各自的表空间头

作为一种原子操作,一旦启动轮转操作,所有表空间密钥的重新加密必须成功。

如果主密钥轮转因服务器故障而中断,InnoDB会在服务器重新启动时向前滚动操作。

有关更多信息,请参阅11节加密和恢复。

轮转主加密密钥只会更改主加密密钥并重新加密表空间密钥。它不解密或重新加密相关联的表空间数据。

轮转主加密密钥需要 ENCRYPTION_KEY_ADMIN权限(或不推荐使用的SUPER权限)。

要轮转主加密密钥,请运行:

mysql> ALTER INSTANCE ROTATE INNODB MASTER KEY;

ALTER INSTANCE ROTATE INNODB MASTER KEY支持并发DML

但是,它不能与表空间加密操作同时运行,并且采取锁来防止并发执行可能产生的冲突

如果正在运行ALTER INSTANCE ROTATE INNODB MASTER KEY操作,则必须先完成该操作,然后表空间加密操作才能继续,反之亦然。

11.加密和恢复

如果在加密操作期间发生服务器故障,则在重新启动服务器时会前滚该操作。

对于通用表空间,加密操作在后台线程中从最后处理的页面恢复。

如果在主密钥轮转过程中发生服务器故障,InnoDB将在服务器重新启动时继续操作。

密钥环组件或插件必须在存储引擎初始化之前加载,以便在InnoDB初始化和恢复活动访问表空间数据之前,可以从表空间标头中检索解密表空间数据页所需的信息。(请参阅加密先决条件。)

当InnoDB初始化和恢复开始时,主密钥旋转操作将恢复。

由于服务器故障,一些表空间密钥可能已经使用新的主加密密钥进行了加密。

InnoDB从每个表空间头读取加密数据,如果数据表明表空间密钥是使用旧的主加密密钥加密的,则InnoDB从密钥环中检索旧密钥并使用它来解密表空间密钥。

InnoDB然后使用新的主加密密钥对表空间密钥进行重新加密并将重新加密的表空间密钥保存回表空间头中。

12.导出加密的表空间

表空间导出仅支持FPT表空间

当导出加密的表空间时,InnoDB会生成一个传输密钥,用于加密表空间密钥。

加密的表空间密钥传输密钥存储在tablespace_name.cfp文件中。

这个文件和加密的表空间文件是执行导入操作所必需的。导入时,InnoDB使用传输密钥解密tablespace_name.cfp文件中的表空间密钥。

有关相关信息,请参阅“导入InnoDB表”。

13.加密和复制

只有在副本运行支持表空间加密的MySQL版本的复制环境中,才支持ALTER INSTANCE ROTATE INNODB MASTER KEY语句

成功的ALTER INSTANCE ROTATE INNODB MASTER KEY语句会写入binlog日志,以便在副本上进行复制。

如果ALTER INSTANCE ROTATE INNODB MASTER KEY语句失败,则不会将其记录到binlog日志中,也不会在副本上进行复制。

如果密钥环组件插件安装在源上,但未安装在副本上,则ALTER INSTANCE ROTATE INNODB MASTER KEY操作的复制将失败。

如果在源和复制副本上都安装了keyring_file或keyring_encrypted_file插件,但复制副本没有keyring数据文件,则复制节点的ALTER INSTANCE ROTATE INNODB MASTER KEY语句会在复制副本上创建keyring数据文件,假设keyring文件数据未缓存在内存中。

ALTER INSTANCE ROTATE INNODB MASTER KEY使用缓存在内存中的密钥环文件数据(如果可用)。

14.识别加密的表空间和库

MySQL 8.0.13中引入的Information Schema库的INNODB_TABLESPACES表包括一个ENCRYPTION列,该列可用于标识加密的表空间。

mysql> SELECT SPACE, NAME, SPACE_TYPE, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACESWHERE ENCRYPTION='Y'\G
*************************** 1. row ***************************SPACE: 4294967294NAME: mysql
SPACE_TYPE: General
ENCRYPTION: Y
*************************** 2. row ***************************SPACE: 2NAME: test/t1
SPACE_TYPE: Single
ENCRYPTION: Y
*************************** 3. row ***************************SPACE: 3NAME: ts1
SPACE_TYPE: General
ENCRYPTION: Y

当在CREATE TABLE或ALTER TABLE语句中指定ENCRYPTION选项时,它会记录在INFORMATION_SCHEMA库的TABLES表的CREATE_OPTIONS列。可以查询此列以标识位于加密文件/表表空间中的表。

mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLESWHERE CREATE_OPTIONS LIKE '%ENCRYPTION%';
+--------------+------------+----------------+
| TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS |
+--------------+------------+----------------+
| test         | t1         | ENCRYPTION="Y" |
+--------------+------------+----------------+

查询Information Schema库INNODB_TABLESPACES表以检索与特定库和表相关联的表空间的信息。

mysql> SELECT SPACE, NAME, SPACE_TYPE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='test/t1';
+-------+---------+------------+
| SPACE | NAME    | SPACE_TYPE |
+-------+---------+------------+
|     3 | test/t1 | Single     |
+-------+---------+------------+

您可以通过查询Information Schema库SCHEMATA表标识启用加密的库

mysql> SELECT SCHEMA_NAME, DEFAULT_ENCRYPTION FROM INFORMATION_SCHEMA.SCHEMATAWHERE DEFAULT_ENCRYPTION='YES';
+-------------+--------------------+
| SCHEMA_NAME | DEFAULT_ENCRYPTION |
+-------------+--------------------+
| test        | YES                |
+-------------+--------------------+

SHOW CREATE SCHEMA还显示了DEFAULT ENCRYPTION子句。

15.监视加密进度

您可以使用Performance Schema库来监控通用表空间mysql系统表空间加密进度

stage/innodb/alter表空间(加密)stage事件工具报告用于通用表空间加密操作的WORK_ESTIMATEDWORK_COMPLETED信息。

下面的示例演示了如何启用stage/innodb/alter表空间(加密)stage事件工具和相关的consumer表来监控通用表空间或mysql系统表空间的加密进度。

有关Performance Schema库stage-event-instruments和相关consumers的信息,请参阅“Performance Schema库stage-event表”。

1.启用stage/innodb/alter表空间(加密)工具:

mysql> USE performance_schema;
mysql> UPDATE setup_instruments SET ENABLED = 'YES'WHERE NAME LIKE 'stage/innodb/alter tablespace (encryption)';

2.启用stage-event-consumers表,其中包括events_stages\ucurrent、events_stages_history和events_stages_history_long。

mysql> UPDATE setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%';

3.运行表空间加密操作。在本例中,对名为ts1的通用表空间进行了加密。

mysql> ALTER TABLESPACE ts1 ENCRYPTION = 'Y';

4.通过查询Performance Schema库events_stages_current表来检查加密操作的进度。WORK_ESTMATED表示表空间中的页面总数。WORK_COMPLETED表示处理的页数

mysql> SELECT EVENT_NAME, WORK_ESTIMATED, WORK_COMPLETED FROM events_stages_current;
+--------------------------------------------+----------------+----------------+
| EVENT_NAME                                 | WORK_COMPLETED | WORK_ESTIMATED |
+--------------------------------------------+----------------+----------------+
| stage/innodb/alter tablespace (encryption) |           1056 |           1407 |
+--------------------------------------------+----------------+----------------+

如果加密操作已完成,events_stages_current表将返回一个空集。在这种情况下,可以检查events_stages_history以查看已完成操作的事件数据。例如

mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM events_stages_history;
+--------------------------------------------+----------------+----------------+
| EVENT_NAME                                 | WORK_COMPLETED | WORK_ESTIMATED |
+--------------------------------------------+----------------+----------------+
| stage/innodb/alter tablespace (encryption) |           1407 |           1407 |
+--------------------------------------------+----------------+----------------+

16.加密使用说明

        在使用ENCRYPTION选项更改FPT表空间时应该进行适当的计划。

驻留在FPT表空间中的表使用COPY算法重建

INPLACE算法用于更改通用表空间mysql系统表空间ENCRYPTION属性

INPLACE算法允许对驻留在通用表空间中的表执行并发DML并发DDL被阻止。

当一个通用表空间或mysql系统表空间被加密时,驻留在该表空间中的所有表都被加密。

同样,在加密表空间中创建的表也是加密的。

如果服务器在正常操作过程中退出或停止,建议使用之前配置的相同加密设置重新启动服务器。

第一个主加密密钥是在对第一个新的现有的表空间进行加密时生成的。

主密钥轮转会重新加密表空间密钥,但不会更改表空间密钥本身

要更改表空间密钥,必须禁用并重新启用加密。

对于FPT表空间,重新加密表空间是一个重新构建表的ALGORITHM=COPY操作。

对于通用表空间和mysql系统表空间,这是一个ALGORITHM=INPLACE操作,不需要重新构建位于表空间中的表。

如果同时使用COMPRESSIONENCRYPTION选项创建表,则在加密表空间数据之前执行压缩

如果密钥环数据文件(由keyring_file_data或keyring_encrypted_file_data命名的文件)为空或丢失,则第一次执行ALTER INSTANCE ROTATE INNODB MASTER KEY将创建主加密密钥。

卸载component_keyring_file或component_keyring _encrypted_file组件不会删除现有的keyring数据文件。

卸载keyring_file或keyring_encrypted_file插件不会删除现有的keyring数据文件。

建议不要keyring数据文件表空间数据文件放在同一目录下。

在运行时或重新启动服务器时修改keyring_file_datakeyring_encrypted_file_data设置可能会导致以前加密的表空间变得不可访问从而导致数据丢失。

InnoDB FULLTEXT索引表支持加密,这些表是在添加FULLTEXT索引时隐式创建的。有关信息,

请参见InnoDB全文索引表。

17.加密限制

高级加密标准(AES)唯一受支持的加密算法。

InnoDB表空间加密使用电子代码簿(ECB)块加密模式进行表空间密钥加密

使用密码块链接(CBC)块加密方式进行数据加密。

填充不与CBC块加密模式一起使用。

相反,InnoDB确保要加密的文本块大小倍数

加密仅支持FPT表空间通用表空间mysql系统表空间

MySQL 8.0.13中引入了对通用表空间的加密支持

mysql 8.0.16版本提供了对mysql系统表空间的加密支持

加密不支持其他表空间类型,包括InnoDB系统表空间

不能将FPT表空间通用表空间mysql系统表空间的加密文件中的表移动或复制到不支持加密的表空间类型。

不能将表从加密表空间移动或复制到未加密表空间。

但是,允许将表从未加密的表空间移动到加密的表。例如,您可以将表从FPT或通用表空间的未加密文件移动或复制到加密的通用表空间。

默认情况下,表空间加密仅适用于表空间中的数据

通过启用innodb_redo_log_encryptinnodb_undo_log_excrypt,可以对redolog日志和undolog日志数据进行加密。

请参阅redolog日志加密和undolog日志加密。有关binlog日志文件和relaylog日志文件加密的信息,

请参阅“加密binlog日志文件与relay日志文件”。

不允许更改位于或以前位于加密表空间中的表的存储引擎。

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

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

相关文章

一个程序员的牢狱生涯(35)惊疑

星期一 惊 疑 ‘四道门’被关上,我和老杨在厨房的小窗口处把四哥递出来的饭菜安顿在小推车上。等号子里的小吕也过来后,一起推着小推车挨个给每个号子打饭。女号子那个长头发忧郁的女犯人仍旧没有出来。 打完饭后,我和老杨回到了号子里,众人大都在喝着打回来的小米稀饭。老…

vs报错:E1696 C++ 无法打开 源 文件

项目–> 项目属性–>C/C -->常规 -->使用Windows运行时扩展 -->选"是" vs 2019 报错:C 无法打开 源 文件 - 知乎 (zhihu.com)

基于trunk、yew构建web开发脚手架

trunk 构建、打包 rust wasm 程序;yewweb 前端开发库; 项目仓库yew-web trunk 之前已经简单介绍了trunk,全局安装: $> cargo install --locked trunk常用命令: trunk build 基于wasm-bindgen构建 wasm 程序。trunk watch …

stm32学习-串口发送和接口

串口接收的方法 查询 流程: 1.在主函数里不断判断RXNE标志位;如果置1了,就说明接收到数据了; 2.调用ReceiveData读取DR寄存器 #include "stm32f10x.h" // Device header #include "Delay.h&…

vue17:v-bind对css样式的控制增强

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

『USB3.0Cypress』FPGA开发(3)GPIF II短包零包时序分析

文章目录 1.时序参数2.FX3_PCLK3.短包和零包3.1短包时序3.2零包ZLP时序 4.传送门 1.时序参数 AN65974文档中明确了操作GPIF II接口时的时序参数&#xff0c;上一篇文章中给出了读写时序图&#xff0c;本篇第二节给出ZLP写周期时序&#xff0c;这里说明相关的时序参数。应该注意…

initial begin end 和always语句区别

initial语句&#xff1a;只执行一次always语句&#xff1a;不断重复执行&#xff0c;直到仿真结束&#xff0c; initial begin 语句1; ... 语句n; end always (posedge clk or negedge clear) begin if(!clear) qout 0; //异步清零 else qout 1; end…

用户态下屏蔽全局消息钩子 —— ClientLoadLibrary 指针覆盖

目录 前言 一、研究 SetWindowsHookEx 的机制 二、概念验证 三、运行效果分析 四、总结与展望 参考文献 原文出处链接&#xff1a;[https://blog.csdn.net/qq_59075481/article/details/139206017] 前言 SetWindowsHookEx 函数帮助其他人员注入模块到我们的进程&#x…

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17 需强化知识点 组合问题&#xff1a;感受遍历的横向和纵向 题目 77. 组合 注意path要深拷贝 class Solution:def combine(self, n: int, k: int) -> List[List[int]]:result []def backtrac…

C++中的模板类的定义与使用

文章目录 前言模板类的定义与使用方式模板类的总结 前言 在C中&#xff0c;模板类是一种通用的类模板&#xff0c;允许在类定义和成员函数实现时使用不具体指定的数据类型或参数。下面是模板类的定义与使用方式&#xff0c;并对其进行总结&#xff1a; 模板类的定义与使用方式…

Kubernetes(k8s) v1.30.1 本地集群部署 安装metallb 支持LoadBalancer 生产环境 推荐 BGP模式部署

1 metallb 安装参考:Kubernetes(k8s) v1.30.1 本地集群部署 默认不支持LoadBalancer metallb来解决-CSDN博客 2 删除 Layer 2 模式 配置 kubectl delete -f IPAddressPool.yaml kubectl delete -f L2Advertisement.yaml kubectl delete -f discuz-srv.yaml 3 配置 k8s Metal…

nacos-opera(k8s)安装问题解决

整理一些关于k8s部署nacos出现的一些恶心的问题 网上说其他说的更改数据库连接都未解决。 在用nacos-opera想安装高可用nacos时连接mysql数据库报错: 报错具体项: No DataSource set 具体就是说没找到数据源。 第一个 检查一下nacos连接数据库配置 : 第二个 检查一下数据库…

[笔试训练](三十三)097:跳台台阶扩展问题098:包含不超过两种字符的最长子串099:字符串的排列

目录 097:跳台台阶扩展问题 098:包含不超过两种字符的最长子串 099:字符串的排列 097:跳台台阶扩展问题 题目链接:跳台阶扩展问题_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 规律题: 1.跳上n级台阶的跳法等于前面1~(n-1)级台阶跳法的总和1。 2.跳…

开发中遇到Electron自定义窗口的问题

开发中遇到Electron自定义窗口的问题 使用VUE3 Electron 开发一个音乐软件&#xff0c;自定义导航栏的放大、缩小和关闭。 其中使用ipcRenderer进行联系Electron&#xff0c;进行放大、缩小和关闭操作。 遇到问题 遇到__dirname is not defined in ES module scope //在V…

一、机器学习概述

1.课程目的 学习机器学习算法、提高算法性能的技巧 2.算法分类 有监督学习supervised learning、无监督学习unsupervised learning (1).有监督学习 在这种学习方式中&#xff0c;算法需要一个带有标签的训练数据集&#xff0c;这些标签通常是每个样本的真实输出或类别。 在有…

[C][指针]详细讲解

目录 0.铺垫1.指针是什么&#xff1f;2.指针变量3.指针和指针类型4.指针类型的意义5.野指针1.野指针成因2.如何规避野指针6.指针运算 6.指针和数组7.二级指针(n级指针&#xff09;8.指针数组9.数组指针10.&数组名VS数组名11.函数指针 12.函数指针数组13.回调函数 0.铺垫 在…

NDIS小端口驱动(九)

PCIe设备难免会遇到一些重置设备的请求&#xff0c;例如重置总线的时候&#xff0c;但是由于NIC网卡的多样性&#xff0c;重置设备确实也有许多要注意的地方&#xff0c;另外还有一些包含WDM的NDIS驱动 微型端口驱动程序硬件重置 微型端口驱动程序必须向 NdisMRegisterMinipo…

C++技能进阶指南——多态语法剖析

前言&#xff1a;多态是面向对象的三大特性之一。顾名思义&#xff0c; 多态就是多种状态。 那么是什么的多种状态呢&#xff1f; 这里的可能有很多。比如我们去买火车票&#xff0c; 有普通票&#xff0c; 学生票&#xff1b; 又比如我们去旅游&#xff0c; 有儿童票&#xff…

视觉与数据的和谐:数字孪生技术在UI设计中的艺术

视觉与数据的和谐&#xff1a;数字孪生技术在UI设计中的艺术 引言 在UI设计的世界里&#xff0c;视觉艺术与数据科学似乎相隔甚远&#xff0c;然而随着数字孪生技术的出现&#xff0c;这两者之间的界限变得模糊。数字孪生技术不仅是一种技术革新&#xff0c;更是一种艺术形式…

LabviewCarla仿真平台搭建一:平台设计及仿真视频可视化实现

文章目录 背景一、平台设计二、视频显示模块实现1、视频模块实现框架2、python-camera数据生成3、labview-camera数据可视化 三、效果展示 背景 在使用carla的时候&#xff0c;有平台的话可以提高效率&#xff0c;因此想结合labview和carla设计一个仿真平台-labcar。其实carla…