SQLServer上的加密
SQLServer上内置了加密用来保护各种类型的敏感数据。在很多时候,这个加密对于你来说是完全透明的;当数据被存储时候被加密,它们被使用的时候就会自动加密。在其他的情况下,你可以选择数据是否要被加密。SQLServer可以加密下列这些组件:
·密码
·存储过程,视图,触发器,用户自定义函数,默认值,和规则。
·在服务器和用户之间传输的数据
密码加密
SQLServer自动将你分配给登陆和应用角色的密码加密。尽管当你可以从主数据库中直接察看系统表格而不需要密码。你不能给对这种情况作出任何修改,事实上,你根本不能破坏它。
定义加密
在有些时候,如果对对象进行加密是防止将一些信息分享给他人。例如,一个存储进程可能包含所有者的商业信息,但是这个信息不能和让其他的人看到,即使他们公开的系统表格并可以看到对象的定义。这就是为什么SQLServer允许你在创建一个对象的时候进行加密。为了加密一个存储进程,使用下面形式的CREATPROCEDURE语句:
CREATEPROCEDUREprocedurename[;number]
[@parameterdatatype
[VARYING][=defaultvalue][OUTPUT]]
[,…]
[WITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]
我们关心的仅仅是可选的WITH参数。你可以详细说明ARECOMPILE或者ENCRYPTION,或者你可以同时说明它们。ENCRYPTION关键字保护SQLServer它不被公开在进程中。结果,如果ENCRYPTION在激活的时候系统存储进程sp_helptext就会被忽视,这个存储进程将被存储在用户创建进程的文本中。如果你不想要加密,你可以使用ALTERPROCEDURE,忽略WITHENCRYPTION子句来重新创建一个进程。
为了能够使用加密。用户和服务器都应该使用TCP/IPNetworkLibraries用来连接。运行适当的NetworkUtility和检查Forceprotocolencryption,看下表,用户和服务器之间的连接将不会被加密。

加密也不能完全自由。当连接确定后,要继续其他的构造,并且用户和服务器必须运行代码来解释加密和解释的包裹。这里将需要一些开销并且当在编译码的时候会使进程慢下来。如果网络包裹在你控制范围之外,使用这种做法是非常好的。
加密中缺少什么?
你可以注意到在这个列表中缺少一些被加密的东西:你表格中的数据。在你存储数据之前,SQL Server不会提供任何内置的工具来加密你的数据。如果你需要保护存储在SQL Server上的数据,我们给你两条建议:第一,你可以利用GRANT 和DENY关键字来控制你想哪个用户可以在SQL Server中读取的数据。
第二.如果你真的想对数据加密,不要设法加密码。你可以利用被测试过的商业产品的算法。
SQL 注入攻击
SQL 注入攻击是一个常规性的攻击,它可以允许一些不法用户检索你的数据,改变服务器的设置,或者在你不小心的时候黑掉你的服务器。SQL 注入攻击不是SQL Server问题,而是不适当的程序。如果你想要运行这些程序的话,你必须明白这冒着一定的风险。
测点定位弱点
SQL 注入的脆弱点发生在程序开发员构造一个WHERE 子句伴随着用户的输入的时候。比如,一个简单的ASP程序允许用户输入一个顾客的ID然后检索公司的全部人员的名字,如果顾客ID如果作为ASP页面的请求串的一部分返回,那么开发员可以编写下面的代码获得数据:
strConn = "Provider=SQLOLEDB;Data Source=(local);" & _
"Database=Northwind;Integrated Security=SSPI"
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strConn
strQuery = "SELECT ContactName FROM Customers " & _
“WHERE CustomerID = '" & Request.Form("CustID") & "'"
Set rstResults = cnn.Execute(strQuery)
Response.Write(rstResults.Fields("ContactName").Value)
现在你知道什么地方有问题了吧?如果用户知道一个用户的ID,他可以通过检索来获得全部的相应的名字。现在明白了?
获得额外的数据
当然,对于一个攻击程序,尽管它不知道任何顾客的ID,甚至不用去猜,它也可以获得数据。为了完成这个工作,它将下面的文本输入到应用程序调用顾客ID的textbox中:
customer ID:
'UNION ALL SELECT ContactName FROM Customers
WHERE CustomerID <>'
如果你输入了这个代码,你将会看到返回一个询问语句:
SELECT ContactName FROM Customers
WHERE CustomerID = ''
UNION ALL SELECT ContactName FROM Customers
WHERE CustomerID <>''
通过获得空和非空顾客的ID并集,这个查询语句会返回数据库中所有的相关姓名。事实上,这个UNION技术可以被用来获得你数据库中大多数信息,看看这个CustomerID的值:
'UNION ALL SELECT FirstName + ' ' + LastName FROM
Employees WHERE LastName <>'
它将SQL语句变成:
SELECT ContactName FROM Customers
WHERE CustomerID = ''
UNION ALL SELECT FirstName + ' ' + LastName FROM
Employees WHERE LastName <>''
看,那就是攻击程序从你的数据库获得的第一个雇员的名字。
更多的攻击程序
如果SQL注入仅仅只有数据暴光这个弱点就已经够糟糕的了,但是,实际上一个良好的攻击程序可以通过这个弱点获取你数据库中所有的资料。看下面这个例子:
';DROP TABLE Customers;--
SQL语句变成:
SELECT ContactName FROM Customers
WHERE CustomerID = ''
; DROP TABLE Customers;-- '
这个分号使语句和SQL Server隔离,所以,这里实际上是两个语句。第一个语句不存在的名字,第二个则撤消的整个Customers表。两个—SQL Server注释符,它可以使子句不发生语法错误。
使用这个技术的变异,一个攻击程序可以在任何SQL语句或者存储过程上运行。通过使用xp_cmdshell扩展存储过程,一个攻击程序同样可以在操作系统命令下运行,显然,这是一个严重的漏洞。
保护自己的数据库
现在,你知道如何防范SQL注入攻击了吗?首先,你不能在用户输入中构造WHERE子句,你应该利用参数来使用存储进程。在最初的ASP页面下,重新写的部分将和刚才我们在表中所看到的东西相似。即使你认为在你的应用程序中没有脆弱点,你应该遵守最小特权原则。使用我们建议的其他安全技术允许你的用户仅仅访问他们能够访问的。在你没有发现你数据库脆弱点的时候,只有这样,不会使你的数据库崩溃。
最后的建议
这就是全部的SQL Server安全系列。也许你现在不是一个全面的专家,但是你已经了解了很多反面。下一步就是你要保护你SQL Server数据,记住你在这里所学到的知识,并利用到你的数据库中保证你的数据不被那些黑客攻击。
分享到:
相关推荐
在使用SQL Server这样的数据库管理系统时,数据加密技术和防止SQL注入是确保数据安全的两个关键方面。本文将对SQL Server的数据加密方法进行简要介绍,并深入探讨SQL Server注入法及其预防措施。 首先,我们来了解...
"基于SQL Server应用的高级SQL注入技术" SQL 注入技术概述 SQL 注入是一种常见的网络攻击手法,攻击者通过注入恶意的 SQL 代码来访问或修改数据库中的敏感数据。这种攻击手法通常是由于应用程序没有正确地验证用户...
8. **安全性**:使用JDBC驱动时,要注意安全问题,比如加密数据库连接信息,限制用户权限,避免SQL注入等。 9. **性能优化**:了解SQL Server的性能调优技巧,如索引优化、查询优化、存储过程的使用等,能显著提升...
#### 安全测试中的注意事项与SQL注入威胁 在探讨如何在SQL Server数据库中加密数据之前,我们需要先理解为何数据加密如此重要。文件描述提到的安全测试中需要注意的问题主要涉及到了SQL注入攻击,这是一种常见的...
- 谨慎处理SQL注入,使用参数化查询或预编译语句。 - 在生产环境中,考虑使用SSL连接以加密数据传输。 综上所述,SQL Server JAR包是Java开发者连接和操作SQL Server数据库必不可少的组件。正确地集成和使用它,...
宽字节注入、SQL手工注入漏洞测试(Oracle数据库)、SQL手工注入漏洞测试(Sql Server数据库)、SQL手工注入漏洞测试(Access数据库)、SQL手工注入漏洞测试(PostgreSQL数据库)、SQL手工注入漏洞测试(MongoDB数据库)、SQL...
在使用SQL Server JDBC时,开发者需要配置JDBC URL,它包含了数据库的地址、端口、实例名等信息,例如:"jdbc:sqlserver://localhost:1433;databaseName=myDatabase"。此外,还需要提供数据库用户名和密码来建立连接...
在描述中提到的"Android通过webService连接SqlServer",这里的webService通常指的是SOAP或RESTful Web服务,它们提供了一种标准的方式来交换数据。 对于C#部分,开发者将创建一个Web服务,它可以是ASP.NET Web ...
在Android开发中,有时我们需要与远程数据库进行交互,例如SQLServer。这个场景通常是通过Web服务,如WebService来实现。本文将详细介绍如何在Android应用中利用WebService接口连接到SQLServer数据库,实现数据的增...
8. **安全性**:使用预编译的PreparedStatement可以防止SQL注入攻击,同时,JDBC驱动还支持SSL加密以保护数据传输的安全。 9. **异常处理**:在编写Java数据库应用时,必须捕获并适当地处理`SQLException`,以确保...
- 防止SQL注入攻击,使用参数化查询或存储过程。 - 关闭不再使用的连接,避免资源泄漏。 8. **升级与兼容性**: 随着SQL Server版本的更新,微软不断优化JDBC驱动。尽管旧版本的驱动可能仍能运行,但为了充分...
总的来说,SQL Server的加密术提供了一种有效保护敏感数据的方法,但需要配合恰当的权限管理和防范SQL注入的策略,才能全面增强系统的安全性。在实际操作中,还应注意平衡安全性和性能,以及考虑使用第三方解决方案...
与SQL Server的集成是许多企业和开发者的需求,因为SQL Server是一个功能强大的关系型...记住,安全总是首位,务必对敏感数据进行加密,并使用预处理语句防止SQL注入攻击。同时,定期更新驱动和PHP版本以保持安全性。
#### 一、SQLServer安全机制与加密技术 **1. SQLServer内置加密技术** - **目的**: SQLServer内置了一系列加密功能,旨在保护敏感数据免受未授权访问。 - **实现**: 当数据存储时会被加密,在使用时会自动解密。...
《基于Java与SQL Server的员工管理系统详解》 员工管理系统是企业信息化建设中不可或缺的一部分,它帮助企业高效地管理人力资源,提高工作效率。本系统采用Java作为后端开发语言,结合SQL Server数据库,构建了一个...
6. **安全措施**:在实际项目中,必须考虑安全性问题,如防止SQL注入攻击,对敏感数据进行加密,以及定期更新数据库凭据等。 7. **环境配置**:这个例子提到可以使用Eclipse或IntelliJ IDEA运行,这两个都是流行的...
而预编译的存储过程和参数化查询则可以降低SQL注入风险,提高查询效率。 7. **安全性和兼容性**:SQL Server驱动包需要定期更新以修复安全漏洞和提高兼容性。确保使用最新版本的驱动,并遵循最佳实践,如使用加密的...
你需要了解如何设置用户权限,使用加密技术保护敏感数据,以及防止SQL注入等攻击。 以上只是部分关键知识点,实际源码可能涵盖更多细节,如数据库设计、存储过程、触发器、性能优化等。通过学习和实践这些内容,你...
3. 参数化查询:为了防止SQL注入攻击,应使用参数化查询。在ASP中,可以通过设置Command对象的Parameters集合来实现。 4. 错误处理:在编程过程中,应妥善处理可能出现的错误,例如连接失败、查询错误等。使用On ...