- 1、本文档共101页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章-存储过程和触发器剖析
第10章 存储过程与触发器 10.1 存储过程 10.2 触发器 10.1 存储过程 10.1.1 存储过程概念 10.1.2 创建和执行存储过程 10.1.3 从存储过程中返回数据 10.1.4 查看和维护存储过程 10.1.5 一些系统存储过程 10.1.1 存储过程概念 SQL语言是应用程序和数据库之间的主要编程接口。 使用SQL语言编写访问数据库的代码时,可用两种方法存储和执行这些代码。 在客户端存储代码,并创建向数据库服务器发送的SQL命令 将SQL语句存储在数据库服务器端,然后由应用程序调用执行这些SQL语句。 存储在数据库服务器端供客户端调用执行的SQL语句就是存储过程。 存储过程功能 接受输入参数并以输出参数的形式将多个值返回给调用者。 包含执行数据库操作的语句。 将查询语句执行结果返回到客户端内存。 存储过程优点 允许模块化程序设计 只需创建一次并存储在数据库中,就可以在应用程序中反复调用该存储过程 改善性能 在创建存储过程时对代码进行分析和优化,并在第一次执行时进行语法检查和编译,将编译好的可执行代码存储在内存的一个专门缓冲区中,以后再执行此存储过程时,只需直接执行内存中的可执行代码即可。 存储过程优点(续) 减少网络流量 只需要一条执行存储过程的代码即可实现,因此,不再需要在网络中传送大量的代码。 可作为安全机制使用 对于即使没有直接执行存储过程中的语句权限的用户,也可以授予他们执行该存储过程的权限。 参数化存储过程有助于保护应用程序不受 SQL Injection 攻击。 SQL Injection 攻击 SQL 注入:一种攻击方式,恶意代码被插入到字符串中,然后该字符串传递到 SQL Server 实例以进行分析和执行。 任何构成 SQL 语句的过程都应进行注入检查,因为 SQL Server 将执行接收的所有语法有效的查询。 主要形式:1)直接将代码插入到与 SQL 命令串联在一起并使其得以执行的用户输入变量。2)间接将恶意代码注入要在表中存储或作为元数据存储的字符串。在存储的字符串随后串连到一个动态 SQL 命令中时,将执行该恶意代码。 工作方式:提前终止文本字符串,然后追加一个新命令。由于插入命令可能在执行前追加其他字符串,因此攻击者将用注释标记“--”来终止注入的字符串。执行时,此后的文本将被忽略。 例8.1,通过串联硬编码字符串和用户输入的字符串而生成一个 SQL 查询 var Shipcity; ShipCity = Request.form (ShipCity); var sql = select * from OrdersTable where ShipCity = + ShipCity + ; 文本框:Redmond SELECT * FROM OrdersTable WHERE ShipCity = Redmond 文本框: Redmond; drop table OrdersTable-- SELECT * FROM OrdersTable WHERE ShipCity = Redmond;drop table OrdersTable-- 验证所有输入 测试输入的大小和数据类型,强制执行适当的限制。 测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。 使用 XML 文档时,根据数据架构对验证所有输入数据。 绝不直接使用用户输入内容来生成 Transact-SQL 语句。 使用存储过程来验证用户输入。 在多层环境中,所有数据都应该在验证之后才允许进入可信区域。未通过验证过程的数据应被拒绝,并向前一层返回一个错误。 实现多层验证。对无目的的恶意用户采取的预防措施对坚定的攻击者可能无效。更好的做法是在用户界面和所有跨信任边界的后续点上验证输入。 使用类型安全的 SQL 参数 SQL Server 的 Parameters 集合提供了类型检查和验证。如用 Parameters 集合,则输入将被视为文字值而不是可执行代码。其好处是可强制执行类型和长度检查,范围以外的值将触发异常。 存储过程的类型 分类:用户定义的存储过程、扩展存储过程和系统存储过程。 用户定义的存储过程:主要的存储过程类型,封装了可重用代码的模块或例程。 用户定义的存储过程可以接受输入参数、向客户端返回表格或标量结果和消息、调用DDL、DML语句,然后返回参数。 用户定义的存储过程分类:T-SQL存储过程和CLR存储过程。 存储过程的类型 1)T-SQL存储过程:指保存的 T-SQL 语句集合,可接受和返回用户提供的参数。比如,存储过程中可能包含根据客户端应用程序提供的信息在一个或多个表中插入新行所需的语句。存储过程也可能从
文档评论(0)