数据安全:编写SQL语句

admin 2026-03-17 23:38:22 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档是一篇关于SQL语句编写的基础教程,内容涵盖创建和查询数据库对象、创建视图和存储过程、以及删除数据库对象三个主要部分。文章详细介绍了前提条件、连接数据库引擎的方法,并提供了具体的SQL代码示例与操作步骤,适合初学者掌握SQLServer的基础语法与操作。 综合评分: 65 文章分类: 数据安全,安全开发,安全培训


请点击上方蓝色字体关注我

编写SQL语句学习思路:

第%201%20节:创建和查询数据库对象

在本节中,将介绍如何创建数据库、在数据库中创建表、将数据插入到表中、更新数据,然后读取数据。

第%202%20节:创建视图和存储过程

在本节中,将创建一个视图和一个存储过程。

第%203%20节:删除数据库对象

在本节中,从表中删除视图、存储过程、数据、删除表等。

一、前提条件

创建一个数据库并创建一个%20Windows%20用户。%20这些任务需要高级别的权限;因此,应该以管理员身份登录到计算机。

系统必须安装以下软件:

  • 任何版本的%20SQL%20Server
  • SQL%20Server%20Management%20Studio
二、连接到数据库引擎

使用SSMS登录%20SQL%20Server数据库,Windows%20身份验证登录名使用%20Windows%20中的凭据。%20SQL%20Server%20身份验证登录名将身份验证信息存储在%20SQL%20Server%20中,独立于%20Windows%20凭据:

三、SQL语句 3.1%20第%201%20节:创建和查询数据库对象 创建数据库

与许多%20Transact-SQL%20语句一样,CREATE%20DATABASE%20语句具有一个必需参数:数据库的名称。CREATE%20DATABASE 还具有许多可选参数,如希望放置数据库文件的磁盘位置。当执行不带可选参数的CREATE%20DATABASE 时,SQL%20Server%20使用其中许多参数的默认值。

  1. 在查询编辑器窗口中,键入以下代码,但不要执行它:
CREATE DATABASE%20TestDataGO

2.使用指针选择词语 CREATE%20DATABASE,再按 F1。%20 CREATE%20DATABASE 帮助文章将打开。%20可以使用此方法查找 CREATE%20DATABASE 以及在使用的其他语句的完整语法。

3.在查询编辑器中,按 F5 以执行语句并创建名为 TestData的数据库。

创建表

若要创建表,必须提供该表的名称以及该表中每个列的名称和数据类型。%20最好是指示是否允许在每个列中使用%20null%20值。%20若要创建表时,必须具有 CREATE%20TABLE 权限,以及对包含该表的架构的 ALTER%20SCHEMA 权限。

大多数表有一个主键,主键由表的一列或多列组成。%20主键始终是唯一的。%20数据库引擎强制实施以下限制:表中的任何主键值都不能重复。

将查询编辑器连接切换到%20TestData%20数据库,在查询编辑器窗口中,键入以下代码,并执行它以更改与 TestData 数据库的连接

USE TestDataGO

创建表

在查询编辑器窗口中,键入以下代码,并执行它以创建一个名为Products的表。该表中各列的名称为ProductID、ProductNamePrice和``ProductDescription

ProductID 列是表的主键。int``varchar(25)、 money和 varchar(max)都是数据类型。Price 和 ProductionDescription 列可以不包含数据。%20此语句包含称为架构的可选元素%20(dbo.)。%20架构是拥有表的数据库对象。%20如果你是管理员, dbo 则为默认架构。%20 %20 dbo 代表数据库所有者。

CREATE%20TABLE%20dbo.Products %20 %20(ProductID int PRIMARY%20KEY%20NOT NULL, %20 %20ProductName varchar(25)%20NOT NULL, %20 %20Price%20money NULL, %20 %20ProductDescription varchar(max) NULL)GO

插入和更新表中的数据

创建表后 Products ,即可使用 INSERT 语句将数据插入表中。%20插入数据后,将使用语句更改行 UPDATE 的内容。%20使用 WHERE 语句的 UPDATE 子句将更新限制为单个行。%20这四条语句会输入以下数据。

基本语法是: INSERT、表名、列列表 VALUES,然后是要插入的值的列表。%20如果某行的前面有两个连字符,则指示该行为注释,编译器将忽略其文本。%20在这种情况下,注释说明允许的语法变体。

将数据插入到表
  1. 执行以下语句,将一行插入到在上一个任务中创建的 Products 表中。
--%20Standard%20syntaxINSERT dbo.Products%20(ProductID,%20ProductName,%20Price,%20ProductDescription) %20  VALUES (1, 'Clamp', 12.48, 'Workbench%20clamp')GO

如果插入成功,则继续执行下一步。

如果插入失败,可能是因为 Product 该表中已有具有该产品%20ID%20的行。

若要继续,请删除表中的所有行并重复上一 TRUNCATE%20TABLE 删除表中的所有行。运行以下命令来删除表中的所有行:

TRUNCATETABLE%20TestData.dbo.Products;GO

删除表后,在此步骤中重复 INSERT 命令。

2.以下语句显示如何通过在字段列表(在圆括号中)中和值列表中均切换 ProductID 和 ProductName 的位置,更改提供参数的顺序。

--%20Changing%20the%20order%20of%20the%20columnsINSERT dbo.Products%20(ProductName,%20ProductID,%20Price,%20ProductDescription) %20  VALUES ('Screwdriver', 50, 3.17, 'Flat%20head')GO

  • 以下语句演示,只要值是按正确顺序列出的,列的名称就是可选的。%20此语法很常见,但是建议不要使用它,因为其他人可能会难以理解你的代码。 NULL 为 Price 列指定,因为还不知道此产品的价格。
  • --%20Skipping%20the%20column%20list,%20but%20keeping%20the%20values%20in%20orderINSERT dbo.Products %20  VALUES (75, 'Tire%20Bar', NULL, 'Tool%20for%20changing%20tires.')GO
    

    4.只要访问和更改默认架构中的表,架构名称是可选的。ProductDescription 列允许%20Null%20值,而且没有提供值,因此可以从语句中完全删除 ProductDescription 列的名称和值。

    --%20Dropping%20the%20optional%20dbo%20and%20dropping%20the%20ProductDescription%20columnINSERT Products%20(ProductID,%20ProductName,%20Price) %20  VALUES (3000, '3%20mm%20Bracket', 0.52)GO
    

    验证之前插入操作的数据:

    更新%20products%20表

    键入并执行以下UPDATE语句将第二种产的 ProductName 从 Screwdriver更改为 Flat%20Head%20Screwdriver

    UPDATE dbo.Products %20  SET ProductName = 'Flat%20Head%20Screwdriver' %20  WHERE ProductID = 50GO
    

    更新后的效果:

    从表中读取数据

    使用 SELECT 语句读取表中的数据。%20该 SELECT 语句是最重要的%20Transact-SQL%20语句之一,语法存在许多变体。%20在本教程中,你将使用五个基本版本。

    读取表中的数据
    1. 键入并执行以下语句以读取 Products 表中的数据。
    --%20The%20basic%20syntax%20for%20reading%20data from a single tableSELECT ProductID,%20ProductName,%20Price,%20ProductDescription %20  FROM dbo.ProductsGO
    

  • 你可以使用星号%20(*)%20选择表中的所有列。%20星号用于临时查询。%20在永久代码中,请提供列列表,使语句返回预测列,即使稍后会将新列添加到表中,也是如此。
  • --%20Returns all columns in%20the table--%20Does%20not use the%20optional%20schema,%20dboSELECT * FROM ProductsGO
    

  • 可以省略不希望返回的列。%20列会按列出它们的顺序返回。
  • --%20Returns%20only%20two%20of%20the columns from the tableSELECT ProductName,%20Price %20  FROM dbo.ProductsGO
    

  • 使用 WHERE 子句可以限制返回给用户的行。
  • --%20Returns%20only%20two%20of%20the%20records%20in%20the%20tableSELECT&nbsp;ProductID,%20ProductName,%20Price,%20ProductDescription&nbsp;%20&nbsp;&nbsp;FROM&nbsp;dbo.Products&nbsp;%20&nbsp;&nbsp;WHERE&nbsp;ProductID&nbsp;<&nbsp;60GO
    

  • 您可以在返回列中的值时使用它们。%20以下示例对 Price 列执行数学运算。%20除非通过使用 AS 关键字提供一个名称,否则以此方式更改的列将没有名称。
  • --%20Returns%20ProductName%20and%20the%20Price%20including%20a%207%%20tax--%20Provides%20the%20name%20CustomerPays%20for%20the%20calculated%20columnSELECT&nbsp;ProductName,%20Price&nbsp;*&nbsp;1.07&nbsp;AS&nbsp;CustomerPays&nbsp;%20&nbsp;&nbsp;FROM&nbsp;dbo.ProductsGO
    

    3.2%20第2节:创建视图和存储过程

    视图是存储 SELECT 语句,存储过程是作为批处理执行的一个或多个%20Transact-SQL%20语句。

    视图像表那样进行查询,但不接受参数。%20存储过程比视图更复杂。%20存储过程可以同时具有输入和输出参数,并且可以包含用于控制代码流的语句,例如 IF 和 WHILE 语句。%20良好的编程做法是对数据库中的所有重复作使用存储过程。

    对于此示例,使用 CREATE VIEW%20创建一个视图,该视图仅选择表中的两列 Products 。%20然后,用于 CREATE%20PROCEDURE 创建一个存储过程,该存储过程接受价格参数,并仅返回那些成本低于指定参数值的这些产品。

    创建视图

    执行以下语句创建一个视图,该视图执行%20Select%20语句,并将产品的名称和价格返回给用户。

    CREATE&nbsp;VIEW&nbsp;vw_Names&nbsp;%20&nbsp;AS&nbsp;%20&nbsp;SELECT&nbsp;ProductName,%20Price&nbsp;FROM&nbsp;Products;GO
    

    测试视图

    视图的处理方式与表类似。%20使用 SELECT 语句访问视图。

    SELECT&nbsp;*&nbsp;FROM&nbsp;vw_Names;GO
    

    创建存储过程

    以下语句创建一个名为 pr_Names的存储过程,接受名为 @VarPrice 、数据类型为 money的输入参数。CAST 函数是%20SQL%20Server%20中的类型转换函数,用于将一个数据类型的表达式转换为另一个数据类型。%20该存储过程打印与输入参数(已从 Products%20less%20than 数据类型更改为 money 字符数据类型)串联的语句 varchar(10) 。%20然后,该存储过程对视图执行 SELECT 语句,将输入参数作为 WHERE 子句的一部分进行传递。%20这将返回价格小于输入参数值的所有产品。

    CREATE&nbsp;PROCEDURE&nbsp;pr_Names&nbsp;@VarPrice&nbsp;money&nbsp;%20&nbsp;AS&nbsp;%20&nbsp;BEGIN&nbsp;%20&nbsp;%20&nbsp;&nbsp;--%20The%20print%20statement%20returns%20text%20to%20the%20user&nbsp;%20&nbsp;%20&nbsp;%20PRINT&nbsp;'Products%20less%20than%20'&nbsp;+&nbsp;CAST(@VarPrice&nbsp;AS&nbsp;varchar(10));&nbsp;%20&nbsp;%20&nbsp;&nbsp;--%20A%20second%20statement%20starts%20here&nbsp;%20&nbsp;%20&nbsp;&nbsp;SELECT&nbsp;ProductName,%20Price&nbsp;FROM&nbsp;vw_Names&nbsp;%20&nbsp;%20&nbsp;%20&nbsp;%20&nbsp;%20&nbsp;&nbsp;WHERE&nbsp;Price&nbsp;<&nbsp;@VarPrice;&nbsp;%20&nbsp;ENDGO
    

    测试存储过程

    若要测试存储过程,请键入并执行以下语句。%20存储过程应该返回在第%201%20节中向 Products 表中输入的、其价格小于 10.00的两个产品的名称。

    EXECUTE&nbsp;pr_Names&nbsp;10.00;GO
    

    3.3%20第%203%20节:删除数据库对象

    删除在第%201%20节和第%202%20节中创建的对象,再删除数据库。

    在删除对象之前,请确保使用正确的数据库:

    USE&nbsp;TestData;GO
    

    撤销存储过程
    USE&nbsp;TestData;GODROP%20PROC%20pr_Names;GO
    

    撤销视图

    使用 DROP 语句删除视图 vw_Names

    DROP&nbsp;VIEW&nbsp;vw_Names;GO
    
    删除表
    1. 使用 DELETE 语句删除 Products 表中的所有行:
    DELETE&nbsp;FROM&nbsp;Products;GO
    

  • 使用 DROP 语句删除 Products 表:
  • DROP&nbsp;TABLE&nbsp;Products;GO
    

    如果文章对你有帮助,请关注我的公众号:


    免责声明:

    本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

    任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

    本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

    本文转载自:成渝Sec 成渝Sec 成渝Sec《数据安全:编写 SQL 语句》

    数据安全:编写SQL语句 网络安全文章

    数据安全:编写SQL语句

    文章总结: 该文档是一篇关于SQL语句编写的基础教程,内容涵盖创建和查询数据库对象、创建视图和存储过程、以及删除数据库对象三个主要部分。文章详细介绍了前提条件、
    自我打脸之内部游服自查 网络安全文章

    自我打脸之内部游服自查

    文章总结: 作者对公司游戏供应商的老旧服务进行安全自查,发现后台使用存在已知漏洞的ThinkPHP组件且无防护,存在弱口令登录风险。虽部分框架调整过,但文件上传
    评论:0   参与:  0