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

【专题】数据库的安全性

1. 数据库安全性概述

数据库存在的不安全因素:

  • 非授权用户对数据库的恶意存取和破坏;

  • 数据库中重要或敏感的数据被泄露;

  • 安全环境的脆弱性。

数据库的安全性与计算机系统的安全性,包括计算机硬件、操作系统、网络系统等的安全性是紧密联系的。操作系统安全的脆弱,网络协议安全保障的不足等都会造成数据库安全性的破坏。

数据库的安全性:

  • 指保护数据库,防止不合法的使用,以免数据的泄露、更改或破坏。

数据库的完整性与安全性的区别:

  • 安全性:保护数据以防止非法用户故意造成的破坏,确保合法用户做其想做的事情。

  • 完整性:保护数据以防止合法用户无意中造成的破坏,确保用户所做的事情是正确的。

为了保护数据库,防止故意的破坏,可以在从低到高的5个级别上设置各种安全措施:

  1. 物理控制:计算机系统的机房和设备应加以保护,通过加锁或专门监护等防止系统场地被非法进入,从而进行物理破坏。

  2. 法律保护:通过立法、规章制度防止授权用户以非法的形式将其访问数据库的权限转授给非法者。

  3. 操作系统支持:无论数据库系统是多么安全,操作系统的安全弱点均可能成为人侵数据库的手段,应防止未经授权的用户从S处着手访问数据库。

  4. 网络管理:由于大多数DBMS都允许用户通过网络进行远程访问,所以网络软件内部的安全性是很重要的。

  5. DBMS实现:DBMS的安全机制的职责是检查用户的身份是否合法及使用数据库的权限是否正确。

要实现数据库安全,DBMS必须提供下列支持:

  • 安全策略说明。

    即安全性说明语言。如支持授权的SQL语言。

  • 安全策略管理。

    即安全约束目录的存储结构、存取控制方法和维护机制。

  • 安全性检查。

    执行“授权”及其检验,认可“他能做他想做的事情吗?”。

  • 用户识别。

    即标识和确认用户,确定“他就是他说的那个人吗?”。

现代 DBMS 一般采用“自主”(discretionary)和“强制”(mandatory)两种存取控制方法来解决安全性问题。

  • 在自主存取控制方法中,每个用户对各个数据对象被授予不同的存取权力(authority)或特权(privilege),哪些用户对哪些数据对象有哪些存取权力都按存取控制方案执行,但并不完全固定。

  • 在强制存取控制方法中,所有的数据对象被标定一个密级,所有的用户也被授予一个许可证级别。

  • 对于任一数据对象,凡具有相应许可证级别的用户就可以存取,否则不能。

2. 数据库安全性控制

计算机系统的安全模型:

  1. 当用户进入计算机系统时,系统首先根据输入的用户标识(如用户名)进行身份的鉴定,只有合法的用户才准许进入系统。

  2. 对已进入计算机系统的用户,DBMS还要进行存取控制,只允许用户在所授予的权限之内进行合法的操作。

  3. 操作系统应能保证数据库中的数据必须由DBMS访问,而不允许用户越过DBMS,直接通过操作系统或其他方式访问。

  4. 数据最后通过加密的方式存储到数据库中,即便非法者得到了已加密的数据,也无法识别数据内容。

数据库安全技术:用户标识与鉴别、存取控制、视图、审计、数据加密。

2.1 用户标识与鉴别

最常用的鉴别方法:

即用什么来标识一个用户,又怎样去识别它。

用户的个人特征识别:

  • 使用每个人所具有的个人特征,如声音、指纹、签名等来识别用户是当前最有效的方法,但是有以下两个问题必须解决。

    1. 专门设备:要能准确地记录、存储和存取这些个人特征。

    2. 识别算法:要能较准确地识别出每个人的声音、指纹或签名。这里关键问是要让“合法者被拒绝”和”非法者被接受”的误判率达到应用环境可接受的程度。百分之百正确(即误判率为零)几乎是不可能的。

  • 另外,其实代价也不得不考虑,这不仅是经济上的代价,还包括识别算法执行的时同和空间代价。它影响整个安全子系统的代价/性能比。

用户的特有物品识别:

  • 让每一用户持有一个他特有的物件,例如磁卡、钥匙等。在识别时,将其插人一个“阅读器”,它读取其面上的磁条中的信息。该方法是目前一些安全系统中较常用的一种方法、但用在数据库系统中要考虑以下两点。

    1. 需要专门的阅读装置。

    2. 要求有从阅读器抽取信息及与DBMS接口的软件

  • 该方法的优点是比个人特征识别更简单、有效,代价/性能比更好;缺点是用户容易忘记带磁卡或钥匙等,也可能丢失甚至被别人窃取。

用户的自定义识别:

  • 使用只有用户自己知道的定义内容来识别用户是最常用的一种方法一般用口令或密码,有时用只有用户自己能给出正确答案的一组问题,有时还可以两者兼用。在使用这类方法时要注意以下几点。

    1. 标识的有效性:口令、密码或问题答案要尽可能准确地标识每一个用户;

    2. 内容的简易性:口令或密码要长短适中,问答过程不要太烦琐

    3. 本身的安全性:为了防止口令、密码或问题答案的泄露或失窃,应经常改变

  • 实现这种方法需要专门的软件来进行用户名或用户ID及其口令的登记、维护与检验等,但它不需要专门的硬件设备,较之以上的方法这是其优点。

  • 其主要的缺点是口令、密码或问题答案容易被人窃取,因此还可以用更复杂的方法。

例如,每个用户都预先约定好一个计算过程或函数,在鉴别用户身份时,系统提供一个随机数,用户根据自己预先约定的计算过程或函数进行计算,而系统根据用户的计算结果是否正确进一步鉴定用户身份。

2.2 存储控制策略

定义用户权限,并将用户权限登记到数据字典中:

  • 权限:用户对某一数据对象的操作权力。

  • 某个用户应该具有何种权限是个管理问题和政策问题而不是技术问题。

  • DBMS系统必须提供适当的语言来定义用户权限,这些定义经过编译后存放在数据字典中,被称做安全规则或授权规则。

  • 使用代码:GRANT SELECT ON dept TO user1@localhost;

合法权限检查:

  • 当用户发出存取数据库的操作请求后,DBMS查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。

  • 以user1用户登录数据库:SELECT * FROM department;

自主存取控制(DAC):

  • 在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。

  • 因此,自主存取控制非常灵活。

强制存取控制(MAC):

  • 在强制存取控制方法中,每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。

  • 因此,强制存取控制相对比较严格。

2.3 自主存取控制

用户使用数据库的方式称为”授权“。权限有两种,即访问数据权限和修改数据库结构的权限。

权限类型:

  • 自主存取控制的权限类型分为两种,即角色权限和数据库对象权限

    1. 角色权限:给角色授权,并为用户分配角色,用户的权限为其角色权限之和。角色权限由 DBA 授予。

    2. 数据库对象权限:不同的数据库对象,可提供给用户不同的操作。该权限由DBA或该对象的拥有者(Owner)授予用户。

角色的授权与取消:

  • 授权命令的语法如下:

    GRANT <角色类型> [,<角色类型>] T0 <用户> [IDENTIFIED BY <ロ令>] <角色类型>::= Connect|Resource|DBA Connect表示该用户可连接到DBMS;

    Resource表示用户可访问数据库资源;

    DBA表示该用户为数据库管理员;

    IDENTIFIED BY用于为用户设置一个初始口令。

  • 取消命令的语法如下:

    REVOKE <角色管理>[,<角色管理>] FROM <用户>

数据库对象的授权与取消:

  • 授权命令的语法如下:

    GRANT <权限> 0N <表名> TO <用户>[,<用户>] [WITH GRANT OPTION] <权限>::= ALL PRIVILEGES|SELECT|INSERT|DELETE|UPDATE[ (<列名>[ ,<列名>])]

    WITH GRANT OPTION表示得到授权的用户,可将其获得的权限转授给其他用户;

    ALL PRIVILEGES表示所有的操作权限。

  • 取消命令的语法如下: REVOKE <权限> ON <表名> EROM <用户>[,<用户>]

数据库对象除了表以外,还有其他对象,例如视图等,但由于表的授权最具典型意义,而且表的授权也最复杂,所以此处只以表的授权为例来说明数据库对象的授权语法其他对象的授权语法与之类似,只是在权限上不同。

2.4 强制存取控制

控制思路:

  • 为每个数据对象(文件、记录或字段等)赋予一定的密级。

系统运行时,采用两条简单规则:

  • 用户只能查看比它级别低或同级的数据;

  • 用户只能修改和它同级的数据。

强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据都是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。

强制存取控制的优点是系统能执行“信息流控制”。前面介绍的授权方法,允许凡有权查看保密数据的用户就可以把这种数据复制到非保密的文件中,造成无权用户也可以接触保密的数据。强制存取控制可以避免这种非法的信息流动。

3. 视图机制

视图机制指通过视图用户只能查看和修改他所能看到的数据。

视图+授权常用的安全性控制方法。

示例:

# 建立视图score_db。CREATE  VIEW  score_db   ASSELECT  *   FROM  score   WHERE  cname=’数据库’;
# 为用户授予操作视图的权限。GRANT  SELECT  ON  score_dbTO  王莎;

4. 安全级别与审计跟踪

4.1 安全级别

TCSEC/TDI将系统安全性分为4等7级:

  1. D级。

    最低安全级别。

    保留D级的目的是为了将一切不符合更高标准的系统,统统归于D级。

  2. C1级。

    实现数据的所有权与使用权的分离,进行自主存取控制DAC,保护或限制用户权限的传播。

  3. C2级。

    提供受控的存取保护。

    即将C1级的自主存取控制进一步细化,通过身份注册、审计和资源隔离以支持“责任”说明。

  4. B1级。

    标记安全保护。

    即对每一客体和主体分别标以一定的密级和安全证等级,实施强制存取控制MAC以及审计等安全机制。

  5. B2级。

    建立安全策略的形式化模型,并能识别和消除隐通道。

  6. B3级。

    提供审计和系统恢复过程,且指定安全管理员(通常是DBA)。

  7. A1级。

    验证设计,提供B3级保护的同时给出系统的形式化设计说明和验证,以确信各安全保护真正实现。、

    即安全机制是可靠的,且对安全机制能实现指定的安全策略给出数学证明。

4.2 审计跟踪

  • 审计功能把用户对数据库的所有操作自动记录下来放入“审计日志”中,称为审计跟踪。

  • 审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。

  • 还可以通过对审计日志分析,对潜在的威胁提前采取措施加以防范。

  • 审计通常是很费时间和空间的,所以DBMS往往都将其作为可选特征,审计功能一般主要用于安全性要求较高的部门。

5. 数据加密

数据加密是防止数据库中数据在存储和传输中失密的有效手段。

加密的基本思想是根据一定的算法将原始数据(称为明文)变换为不可直接识别的格式(称为密文),从而使得不知道解密算法的人无法获知数据的内容

由于数据加密与解密也是比较费时的操作,而且数据加密与解密程序会占用大量系统资源,因此数据加密功能通常也作为可选特征。

6. 统计数据库的安全性

统计数据库查询的仅仅是某些记录的统计值,例如求记录数、和、平均值等,不允许用户查询单个记录的信息。

  • 例如:人口调查数据库,它包含大量的记录,但其目的只是向公众提供统计、汇总信息,而不是提供单个记录的内容。

在统计数据库中,虽然不允许用户查询单个记录的信息,但是用户可以通过处理足够多的汇总信息来分析出单个记录的信息,这就给统计数据库的安全性带来严重的威胁。

7. MySQL的安全设置

7.1 用户管理

MySQL的用户包括root用户和普通用户

  • root用户是超级管理员,拥有对整个MySQL服务器完全控制的权限。

  • 普通用户只能拥有赋予给它的权限。

为了防止非授权用户对数据库进行存取,DBA可以创建登录用户、修改用户信息和删除用户。

创建登录用户:

CREATE  USER   用户  [IDENTIFIED  BY [PASSWORD] '密码'][,用户  [IDENTIFIED  BY [PASSWORD] '密码']]…;
  • 用户的格式:用户名@主机名;没有指定主机名,则主机名默认为“%”,表示一组主机; localhost表示本地主机。

  • IDENTIFIED BY子句指定创建用户时的密码。

示例:创建用户TEMPUSER,其口令为test。

CREATE USER tempuser@localhost IDENTIFIED BY 'temp';

示例:创建的新用户的详细信息自动保存在系统数据库mysql的user表中。

USE mysql;
SELECT * FROM user WHERE user='tempuser';

修改用户密码:

SET PASSWORD FOR 用户='新密码';

示例:修改用户账号tempuser的密码为123456。

SET PASSWORD FOR tempuser@localhost='123456';

修改用户名:

RENAME USER 旧用户名 TO 新用户名[,旧用户名 TO 新用户名][,…];

示例:修改普通用户tempuser的用户名为temp_U。

RENAME USER tempuser@localhost TO temp_U@localhost;

删除用户:

DROP  USER  用户名[,…];

示例:删除用户temp_U。

DROP USER temp_U@localhost;
​
USE mysql;
SELECT * FROM user WHERE user='temp_U' and host='localhost';

7.2 权限管理

授予权限。

授予MySQL字段级别权限:

GRANT  权限名称(列名[,列名,…])[, 权限名称(列名[,列名,…]),…]ON  TABLE  数据库名.表名或视图名TO  用户[,用户,…];
  • Column_priv权限表提供的权限名称:

示例:为用户column_user授予对emp表中列的操作权限。

CREATE USER column_user@localhost  IDENTIFIED  BY 'password';
​
GRANT  SELECT(ename,sal,empno),UPDATE(sal)  
ON TABLE scott1.emp 
TO column_user@localhost;
​
SELECT * FROM mysql.columns_priv;

授予MySQL表级别权限:

GRANT  权限名称[, 权限名称,…]ON  TABLE 数据库名.表名或数据库名.视图名TO  用户[,用户,…];

示例:为用户table_user授予对emp表的操作权限。

CREATE USER table_user@localhost IDENTIFIED BY 'password';
​
GRANT ALTER,SELECT,INSERT(empno,ename) ON TABLE scott1.empTO table_user@localhost;
​
SELECT * FROM mysql.tables_privWHERE host='localhost' and user='table_user';

授予MySQL存储程序级别权限:

GRANT  权限名称[, 权限名称,…]ON  FUNCTION|PROCEDURE  数据库名.函数名 | 数据库名.存储过程名TO  用户[,用户,…];

示例:为用户proc_user授予存储过程的操作权限。

CREATE USER proc_user@localhost  IDENTIFIED BY 'password';
​
GRANT  EXECUTE  ON PROCEDURE scott1.emp_p TO  proc_user@localhost;
​
GRANT  ALTER ROUTINE,EXECUTE  ON FUNCTION scott1.sum_fnTO proc_user@localhost;
​
SELECT * FROM mysql.procs_priv;

授予MySQL数据库级别权限:

GRANT  权限名称[, 权限名称,…]  ON    数据库名.*TO  用户[,用户,…];

示例:为用户database_user授予对scott1数据库的操作权限。

CREATE USER database_user@localhost IDENTIFIED BY 'password';
​
GRANT  GRANT CREATE,SELECT,DROPON scott1.*TO database_user@localhost; 
​
SELECT * FROM mysql.db  WHERE host='localhost' and db='scott1';

授予MySQL服务器管理员级别权限:

GRANT 权限名称[, 权限名称,…]  ON  *.*  TO 用户[,用户,…];

示例:为用户server_user授予对所有数据库的操作权限。

CREATE USER server_user@localhost IDENTIFIED BY 'password';
​
GRANT ALL PRIVILEGES ON *.*TO server_user@localhost;
​
SELECT * FROM mysql.userWHERE host='localhost' and user='server_user';

权限的转移:

WITH GRANT OPTION

  • 如果使用了WITH GRANT OPTION子句,则表示TO子句中的所有用户都具有把自己所拥有的权限授予给其他用户的权利。

示例:创建新用户u1和u2,为u1赋予对dept表增删改查的权限,并且u1能够将所拥有的权限再赋予给u2。

CREATE USER u1@localhost IDENTIFIED BY '123';
CREATE USER u2@localhost IDENTIFIED BY '456';
​
GRANT SELECT,INSERT,UPDATE,DELETE ON company.deptTO u1@localhostWITH GRANT OPTION;

撤销权限:

撤消所有权限:

REVOKE  ALL  PRIVILEGES,GRANT  OPTIONFROM 用户[,用户,…];

示例:撤消用户column_user@localhost的所有权限。

REVOKE ALL PRIVILEGES,GRANT OPTIONFROM column_user@localhost;

撤消指定权限:

REVOKE 权限名称[(列名[,列名,…])][,权限名称[(列名[,列名,…])],…]ON  *.* | 数据库名.* | 数据库名.表名或视图名FROM  用户[,用户,…];

示例:撤消用户database_user@localhost的CREAT和DROP权限。

REVOKE  CREATE,DROP ON scott1.*FROM database_user@localhost;
​
SELECT * FROM mysql.dbWHERE host='localhost' and user='database_user';

7.3 角色管理

角色是具有名称的一组相关权限的组合,即将不同的权限集合在一起就形成了角色。

角色的优势:

  • 当为用户授予角色时,相当于为用户授予了多种权限。

  • 避免了向用户逐一授权,从而简化了用户权限的管理。

创建角色:

CREATE ROLE 角色名;

  • 角色格式:'角色名'@'主机名'。

示例:分别在本地主机上创建应用程序角色app、运维人员角色ops、开发人员读角色dev_read、开发人员写角色dev_write。

CREATE ROLE 'app'@'localhost','ops'@'localhost','dev_read'@'localhost','dev_write'@'localhost';
​
SELECT * FROM mysql.userWHERE host='localhost' and user IN('app','ops','dev_read','dev_write');

授予角色权限:

示例:分别授予角色app数据读写权限、角色ops访问数据库权限、角色dev_read读取权限、角色dev_write写权限。

GRANT SELECT,INSERT,UPDATE,DELETEON  SCOTT1.*  TO 'app'@'localhost';
​
GRANT ALL PRIVILEGESON  SCOTT1.*  TO 'ops'@'localhost';
​
GRANT  SELECT ON  SCOTT1.*  TO 'dev_read'@'localhost';
​
GRANT  INSERT,UPDATE,DELETEON  SCOTT1.*  TO 'dev_write'@'localhost';

授予用户角色:

GRANT 角色[,角色, ...] TO 用户[,用户, ...]

示例:分别将角色授予新用户app01、ops01、dev01、dev02、dev03。

GRANT 'app'@'localhost' TO 'app01'@'localhost';
​
GRANT 'ops'@'localhost' TO 'ops01'@'localhost';
​
GRANT 'dev_read'@'localhost' TO 'dev01'@'localhost';
​
GRANT 'dev_read'@'localhost','dev_write'@'localhost'TO  'dev02'@'localhost','dev03'@'localhost';

用户在使用据夜色权限前必须先激活角色,设置语句如下:

SET GLOBAL activate_all_roles_on_login = ON

撤销用户角色:

REVOKE 角色[,角色,…] FROM 用户[,用户,…];

示例:撤消用户app01的角色app。

REVOKE 'app'@'localhost' FROM 'app01'@'localhost';
​
SHOW GRANTS FOR 'app01'@'localhost' USING 'app'@'localhost';

删除角色:

DROP  ROLE   角色[,角色,…];

示例:删除角色app和ops。

DROP ROLE 'app'@'localhost','ops'@'localhost';

相关文章:

【专题】数据库的安全性

1. 数据库安全性概述 数据库存在的不安全因素&#xff1a; 非授权用户对数据库的恶意存取和破坏&#xff1b; 数据库中重要或敏感的数据被泄露&#xff1b; 安全环境的脆弱性。 数据库的安全性与计算机系统的安全性&#xff0c;包括计算机硬件、操作系统、网络系统等的安全…...

【含开题报告+文档+源码】基于Java的房屋租赁服务系统设计与实现

开题报告 随着城市化进程的加速和人口流动性的增加&#xff0c;租房需求不断增长。传统的租赁方式往往存在信息不对称、流程不规范等问题&#xff0c;使得租户和房东的租赁体验不佳。而而房屋租赁系统能够提供便捷、高效的租赁服务&#xff0c;满足租户和房东的需求。房屋租赁…...

数据结构模拟题[十]

数据结构试卷&#xff08;十&#xff09; 一、选择题 (24 分) 1&#xff0e;下列程序段的时间复杂度为&#xff08; &#xff09;。 i0 &#xff0c;s0&#xff1b; while (s<n) {ssi &#xff1b;i &#xff1b;} (A) O(n 1/2 ) (B) O(n 1/3 ) (C) O(n) (D) O(n 2 ) …...

Java基于微信小程序的美食推荐系统(附源码,文档)

博主介绍&#xff1a;✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

基于CNN-RNN的影像报告生成

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【PaddleNLP的FAQ问答机器人】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…...

MacOS如何读取磁盘原始的扇区内容,恢复误删除的数据

MacOS 也是把磁盘当成一个文件&#xff0c;也是可以使用 dd来读取&#xff0c;命行令行如下&#xff1a; sudo dd if/dev/disk2 bs512 count1 skip100 ofsector_100.bin 这个就是读取 /dev/disk2这个磁盘每100这个sector, bs表示扇区大小是512. 但是你直接用读&#xff0c;应…...

创客匠人:打造IP陷入迷茫?20位大咖直播如何破局,实现财富增长

就在明天&#xff01; 11月4日-8日&#xff0c;全球创始人IP领袖峰会线上启动会——《2025年知识IP创新增长训练营*20位各界大咖标杆集体赋能》直播活动&#xff0c;即将重磅来袭&#xff01; 20位行业大咖5大篇章主题内容的强大组合&#xff0c;将为你逐一精彩呈现&#xff…...

视觉目标检测标注xml格式文件解析可视化 - python 实现

视觉目标检测任务&#xff0c;通常用 labelimage标注&#xff0c;对应的标注文件为xml。 该示例来源于开源项目&#xff1a;https://gitcode.com/DataBall/DataBall-detections-100s/overview 读取 xml 标注文件&#xff0c;并进行可视化示例如下&#xff1a; #-*-coding:ut…...

clion远程配置docker ros2

CLION与docker中的ROS2环境构建远程连接 设备前提开启SSH服务CLION配置CLION配置CLION IDE远程连接过程实现CLION SSH 远程部署 开启fastlio2debug之旅 设备前提 本地宿主机&#xff1a;UBUNTU 20.04 docker container:ros2_container (内置环境ROS2 humble) 通过之前的tcp连接…...

微信小程序 uniapp 腾讯地图的调用

/* 提前在您的app.json上加上这些代码 "permission": { "scope.userLocation": { "desc": "你的位置信息将用于地图中定位" } …...

OLAP平台架构演化历程

OLAP平台架构演化历程 0 导读 随着大数据的持续发展及数字化转型的兴起&#xff0c;大数据OLAP分析需求越来越迫切&#xff0c;不论是大型互联网企业&#xff0c;还是中小型传统企业&#xff0c;都在积极探索及实践OLAP引擎选型及平台架构建设&#xff0c;大数据技术的蓬勃发展…...

OmniGen: Unified Image Generation(代码的复现)

文章目录 论文简介模型的部署需要下载的预训练权重 模型的生成效果图像编辑的效果风格迁移的效果 总结 论文简介 OmniGen的github项目地址 OmniGen: Unified Image Generation。OmniGen 在各种图像生成任务中都表现出了卓越的性能&#xff0c;并可能大大超过现有扩散模型的极…...

keepalive+mysql8双主

1.概述 利用keepalived实现Mysql数据库的高可用&#xff0c;KeepalivedMysql双主来实现MYSQL-HA&#xff0c;我们必须保证两台Mysql数据库的数据完全一致&#xff0c;实现方法是两台Mysql互为主从关系&#xff0c;通过keepalived配置VIP&#xff0c;实现当其中的一台Mysql数据库…...

C#-基础构造函数、析构函数

一&#xff1a;基础的构造函数 实例化对象时 调用的函数&#xff0c;主要是用来初始化成员变量的。 在构造函数时&#xff0c;对象的初始化是自动完成的&#xff0c;为默认值&#xff0c;但为满足一些特殊数据的初始化操作。可不使用系统默认给的构造函数 基本语法&#xff…...

Ubuntu删除docker

文章目录 安装依赖1.安装操作系统&#xff1a;2.CPU支持 安装docker1.查看系统版本2.执行卸载 安装依赖 1.安装操作系统&#xff1a; 高于 Ubuntu 20.04(LTS) 版本 2.CPU支持 ARM和X86_64 安装docker 1.查看系统版本 cat /etc/*releas*uname -a2.执行卸载 检查本地dock…...

系统地介绍Qt的QtConcurrent模块

本文使用了AI生成的内容&#xff0c;请注意甄别&#xff01; 本文系统地介绍Qt的QtConcurrent模块&#xff0c;它允许开发者无需使用低级线程原语&#xff08;如互斥锁、读写锁、等待条件或信号量&#xff09;即可编写多线程程序。下面将由浅入深地逐步介绍这一内容&#xff1a…...

【进阶sql】复杂sql收集及解析【mysql】

开发时会出现&#xff0c;必须写一些较复杂sql的场景 可能是给会sql的客户 提供一些统计sql 或是临时需要统计数据信息但是 开发一个统计功能有来不及的情况 也可能是报表系统组件 只支持 sql统计的情况 特地记录下这些sql 作为积累 substring 截取查询出的字符串&#xff…...

达梦检查工具dmdbchk的性能

摘要&#xff1a; 本文介绍了dmdbchk的基础使用&#xff0c;例如检查信号量&#xff0c;其性能大约是10GB/分钟&#xff0c;新版本的会更快。 当数据库出问题时&#xff0c;可能会考虑用dmdbchk工具检查数据文件和库内部是否出现异常。对于450G的库会耗时多久&#xff1f; 答&…...

Docker是什么

docker是什么 docker本质docker和虚拟机的区别docker架构Docker Registry镜像仓库分类镜像仓库工作机制docker Hub docker本质 Docker 本质其实是 LXC 之类的增强版&#xff0c;它本身不是容器&#xff0c;而是容器的易用工具。容 器是 linux 内核中的技术&#xff0c;Docker 只…...

Vue进阶指南:Watch 和 Computed 的深度理解

前言 在 Vue.js 开发中&#xff0c;我们常常会用到 watch 和 computed。虽然它们都能用来监听和处理数据的变化&#xff0c;但在使用场景和性能上有显著的区别。本篇文章会通过通俗易懂的方式给你讲解 Vue.js 中 watch 和 computed 的区别和使用方法。 基本概念 Computed&am…...

源码编译实战:定制rpath与interpreter实现高版本glibc程序向下兼容部署

1. 为什么需要高版本glibc程序向下兼容 最近在给客户部署AI推理服务时遇到一个典型问题&#xff1a;开发环境用的是Ubuntu 20.04&#xff08;glibc 2.31&#xff09;&#xff0c;而生产环境是CentOS 7&#xff08;glibc 2.17&#xff09;。直接拷贝编译好的程序运行时&#xff…...

如何永久保存微信聊天记录?免费开源工具WeChatMsg完整指南

如何永久保存微信聊天记录&#xff1f;免费开源工具WeChatMsg完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

如何快速掌握深度学习调参技巧:tuning_playbook_zh_cn完全解析

如何快速掌握深度学习调参技巧&#xff1a;tuning_playbook_zh_cn完全解析 【免费下载链接】tuning_playbook_zh_cn 一本系统地教你将深度学习模型的性能最大化的战术手册。 项目地址: https://gitcode.com/gh_mirrors/tu/tuning_playbook_zh_cn tuning_playbook_zh_cn是…...

2026秋招必备!大模型面试八股文精华(小白程序员必收藏)

本文整理了备战2026秋招时所需的大模型面试核心问题&#xff0c;涵盖LLM/VLM理论、RAG/Agent开发、RLHF对齐技术及模型评估等全链路知识。内容基于多次真实面试经历&#xff0c;建议读者先独立思考再对照答案&#xff0c;达到知其然更知其所以然的学习效果。预祝求职顺利&#…...

使用Python运行VirtualLab Fusion光学仿真

摘要 VirtualLab Fusion允许Python外部访问其建模技术、求解器和结果。这个用例介绍了一种使用路径变量和Visual Studio代码将Python连接到VirtualLab Fusion的简单方法。在本示例中&#xff0c;我们将演示如何使用Python脚本运行光学仿真&#xff0c;以向用户简要概述这种跨…...

GEO数据整合实战:跨越批次效应的多队列联合分析

1. GEO数据整合的核心挑战 当你手头有多个GEO数据集时&#xff0c;就像收集了来自不同实验室的实验笔记。我处理过GSE83521和GSE89143的联合分析&#xff0c;发现最大的障碍就是批次效应——就像不同厨师用相同菜谱做菜&#xff0c;味道总会有些差异。这种差异可能来自实验时间…...

LabelImg终极指南:3步掌握图像亮度调整技巧,提升标注效率300%

LabelImg终极指南&#xff1a;3步掌握图像亮度调整技巧&#xff0c;提升标注效率300% 【免费下载链接】labelImg LabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but yo…...

恶意代码分析——基础技术篇

恶意代码分析——基础技术篇 文章目录 恶意代码分析目的恶意代码分析方法恶意代码种类恶意代码静态分析 环境在线反病毒引擎获取哈希值&#xff08;certutil-hanshfile path MD5&#xff09;查找字符串hive string ida火绒剑加壳&查壳 文件加壳使用PEiD检测加壳 导入导出…...

5个维度解决经典游戏兼容性痛点:DxWrapper的兼容性引擎创新价值

5个维度解决经典游戏兼容性痛点&#xff1a;DxWrapper的兼容性引擎创新价值 【免费下载链接】dxwrapper Fixes compatibility issues with older games running on Windows 10 by wrapping DirectX dlls. Also allows loading custom libraries with the file extension .asi i…...

如何用OB_Template构建你的终极读书笔记系统:Obsidian新手完全指南

如何用OB_Template构建你的终极读书笔记系统&#xff1a;Obsidian新手完全指南 【免费下载链接】OB_Template OB_Templates is a Obsidian reference for note templates focused on new users of the application using only core plugins. 项目地址: https://gitcode.com/g…...