`
bolutes
  • 浏览: 869460 次
文章分类
社区版块
存档分类
最新评论

在 SQL Server 中编写安全动态SQL

 
阅读更多
SQL 注入攻击剖析

<!---->

注入过程的工作原理是过早终止某一文本字符串并追加一个新命令。 因为插入的命令可能在执行之前已追加了其他字符串,攻击者可以使用注释标记“--”终止注入的字符串。 执行时会忽略后续的文本。 通过使用分号 (;) 分隔符可以插入多个命令。

只要注入的 SQL 代码在语法上正确,就无法通过编程方式检测到这种篡改。 因此,您必须验证所有用户输入并仔细检查将在您使用的服务器上执行构造的 SQL 命令的代码。 切勿连接未经验证的用户输入。 字符串连接是脚本注入的主要入口点。

下面是几条有帮助的准则:

  • 切勿直接从用户输入生成 Transact-SQL 语句,应使用存储过程来验证用户输入。

  • 通过测试类型、长度、格式和范围来验证用户输入。 使用 Transact-SQL QUOTENAME() 函数转义系统名称,或使用 REPLACE() 函数转义字符串中的任何字符。

  • 在您的应用程序的每个层中实现多层验证。

  • 测试输入内容的大小和数据类型并实施适当的限制。 这有助于防止故意的缓冲区溢出。

  • 测试字符串变量的内容,并只接受预期值。 拒绝包含二进制数据、转义序列和注释字符的输入。

  • 如果使用 XML 文档,则在输入时对照其架构验证所有数据。

  • 在多层环境中,在允许数据进入受信任区域之前所有数据都应该进行验证。

  • 在可能据以构造文件名的字段中,不接受下列字符串:AUX、CLOCK$、COM1 到 COM8、CON、CONFIG$、LPT1 到 LPT8、NUL 以及 PRN。

  • 使用带有存储过程和命令的 SqlParameter 对象以提供类型检查和长度验证。

  • 在客户端代码中使用 Regex 表达式以筛选无效字符。

<!---->

在过程代码中动态执行已创建的 SQL 语句会中断所属权链,使 SQL Server 按照由动态 SQL 访问的对象检查调用方的权限。

在 SQL Server 2000 中,您必须对基础表授予权限才能使用动态 SQL,从而使应用程序容易受到 SQL 注入攻击。

SQL Server 2005 引入了两个新方法,用于向用户授予使用存储过程和可执行动态 SQL 的用户定义函数来访问数据的权限。

EXECUTE AS

EXECUTE AS 子句用 EXECUTE AS 子句中指定的用户的权限替换调用方的权限。 嵌套的存储过程或触发器在代理用户的安全上下文下执行。 这可能会中断依赖于行级安全性或要求审核的应用程序。 某些可返回用户标识的函数会返回 EXECUTE AS 子句中指定的用户的标识,而不是原始调用方的标识。 只有在执行该过程或发出 REVERT 语句后,执行上下文才会恢复到原始调用方。

证书签名

在执行使用证书进行签名的存储过程时,授予给证书用户的权限会与调用方的权限合并。 执行上下文保持不变,证书用户不模拟调用方。 为存储过程签名需要执行多个步骤才能实现。 每次修改过程时,都必须重新签名。

跨数据库访问

在执行动态创建的 SQL 语句时,跨数据库的所属权链接不起作用。 在 SQL Server 2005 中,可以通过创建一个可访问另一个数据库中数据的存储过程并用两个数据库中都存在的证书为此过程签名来解决这个问题。 这可为用户提供访问该过程所使用的数据库资源的权限,而不必向他们授予数据库访问权或权限。

以上内容转自:http://msdn.microsoft.com/zh-cn/library/bb669091.aspx

分享到:
评论

相关推荐

    SQLPrompt for SQLServer2016 智能提示插件 SQL2016 提示

    SQLPrompt for SQLServer2016 智能提示插件 SQL2016 提示 SQLPrompt最新版本 绿色版 SQL Prompt 是一款拥有SQL智能提示功能的SQL Server和VS插件。SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动...

    说说SQL Server 网络配置

    打开Sql Server Configuration Manager,里面显示了SQL Server的网络配置,这些到底表示什么含义呢?   图一:MSSQLSERVER的协议  这些配置选项,其实是为了保证客户端和数据库服务器能够正确的连接,以便...

    sqlserver存储过程的编写

    有关sqlserver存储过程的编写及例子,并且对其他如.net中的存储过程有一点例子。

    sql server2008轻松编写t-sql存储过程

    sql server2008轻松编写t-sql存储过程sql server2008轻松编写t-sql存储过程

    适用SQL Server 2016的智能提示插件-SQL Prompt

    SQL Prompt 是一款拥有SQL智能提示功能的SQL Server和VS插件。能根据数据库的对象名称,语法和用户编写的代码片段自动进行检索,智能的为用户提供唯一合适的代码选择。亲测可适用于SQL Server 2016,SQL Server 2014...

    DBA级SQLServer数据库从入门到精通 完整版PDF

    本文档给大家带来了关于SqlServer数据的完整教程。本教程会包含多个阶段来学习,从零基础到高级进阶,再到DBA的全套教程,主要内容包括Sql语言基础、数据库设计原则、高级查询技巧、存储过程编写、性能优化调整等。...

    SQL Server中求素数

    SQL Server 2005中求素数的方法,可以求出m到n之间的所有素数。

    编写安全的SQL Server扩展存储过程

    SQL Server 的扩展存储过程,其实就是一个普通的 Windows DLL,只不过按照某种规则实现了某些函数而已。本文介绍一下扩展存储过程,该动态库导出了三个函数: Init,work,Final,Init读文件,存储信息于内存,work简单的...

    sqlserver snowflake 函数

    使用c# 编写的 sqlserver udf 雪花函数 编译环境为 .net framework 4.5 目标数据库为 sqlserver2012 实际可以在 sqlserver2012-2019 上发布使用 注: 1. 需要开启多个实例权限 2. 需要开启单数据库信任 3. 该程序...

    用C#和sql server2005 编写一个超市管理系统

    这是一个用C#和sqlserver2005编写一个超市进销存管理系统

    用JavaBean编写SQL Server数据库连接类

    本文介绍了以SQLServer为例编写一个简单的数据库连接工具类,把它封装到web项目的(WEB-INF/classes/)目录下,在Java或JSP页面引入就可以实现了。

    SQL Server 最佳实践分析器 [免费版]

    我觉得这个是重点,因为只有明白了这些SQL Server操作和管理的最佳实践准则,才能在设计数据库和编写T-SQL脚本时,尽量按照这些Rules来操作,提高SQL Server和应用程序的性能和效率。 其实所有的Rules都在这里...

    SQLserver 2008将数据导出到Sql脚本文件的方法

    在弹出的界面中,点2次“下一步”进入如图界面中,把“编写数据的脚步”置为true。 4。其它的操作点“下一步”即可。下图是最后生成的Sql脚本: 注意:这里一定要使用Sql Server Management Studio 2008,其它版本...

    JAVA、SP、SQL SERVER2012编写的通讯录管理系统

    在线通讯录管理系统,使用dao servlet entity utils 包,连接后台SQL SERVER 数据库。实现联系人增、删、查、改。并实现按姓名、按分组查询联系人。 开发环境:将SQL SERVER源程序附加进数据库,将代码包导入到...

    用C#和SQLSERVER编写的留言板

    用C#和SQLSERVER编写的留言板,使用的是SQL语句直接编写的

    SQL Server存储过程编写和优化措施

    SQL Server存储过程编写和优化措施

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

    该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-SQL编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...

    sql server 程序设计

    vb+sql server做的选课系统,开发环境 1、操作系统:Windows 2000 Server 2、数据库: SQL Server 2000 3、开发工具:Visual Basic 6.0 中文版

    微型Sql Server查询分析器、数据库比较工具,SQL语句编写助手

    可对SqlServer的两个数据库表结构等进行详细的比较,十分方便,小巧 SQL语句编写助手SQLAssistant: 对主流数据库Sql Server,Oracle,DB2,MySql,Access等都可用,写脚本或存储过程时提示功能十分强大,十分方便,...

Global site tag (gtag.js) - Google Analytics