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

如何在SQL Server数据库中加密数据

        如何在SQL Server数据库中加密数据

  为了防止某些别有用心的人从外部访问数据库,盗取数据库中的用户姓名、密码、信用卡号等其他重要信息,在我们创建数据库驱动的解决方案时,我们首先需要考虑的的第一条设计决策就是如何加密存储数据,以此来保证它的安全,免受被他人窥测。
  SQL Server中有哪一种支持可以用于加密对象和数据?从一开始就讨论一下SQL Server欠缺什么是明智的,或者是对于SQL Server中的加密部分你不应该做什么。


  首先,SQL Server有两个内置的密码函数——即,pwdencrypt() 和 pwdcompare()。同时,还有两个SQL Server用来管理密码哈希的没有正式记录的函数:pwdencrypt() 将密码哈希过后进行存储; pwdcompare()将提供的字符串与哈希后的字符串进行比较。不幸的是,这个哈希函数不是非常安全,它可以通过字典攻击算法被破解(类似命令行应用程序!)。


  这些函数随着SQL Server的版本发展而不断进行修改,这也是另一个没有使用它们的原因。早期版本的SQL Server对密码进行的哈希,在后来的版本中无法解密,所以如果你依赖一个版本中的函数,那么当升级的时候,所有你的加密数据就都没有用了,除非你可以首先对其解密——这也就违背了加密的最初的目的。   


  第二,你可能会尝试去创建一个针对你的数据库的自制的加密解决方案,但是有以下三个理由说明你不要这样做:


  除非你是加密专家,否则胡乱编写的加密系统只会提供非常低级的价值不高的保护。新鲜的是,单向密码哈希或者 "ROTx "形式的加密几乎不需要费事就可以被轻松打败。


  如果由于你自己的能力的缺乏而导致加密被破解,那么你的数据就完蛋了。你需要将所有的东西进行没有加密的备份,是吗?(即使你加密了,那里有没有安全漏洞?)


  当市面上提供有专业级别的,具有工业强度的加密解决方案的时候,你就不值得花费时间去自己做。把你的时间用于构建一个好的,坚固的数据库,而不是再重新发明一次车轮。


  那么,什么才是好的加密数据的方式呢?


  对于新手,微软提供了一个自己生成的加密解决方案,CryptoAPI 。对于轻量级的加密,军用级别的安全就不在考虑范围之内,它具有相对容易实现的优势:管理员可以安装一个名为CAPICOM 的ActiveX 控制,它可以在T-SQL存储过程中提供CryptoAPI 功能。CAPICOM 支持各种类型的双向加密和单向哈希算法,所以管理员可以挑选最适合应用程序的问题的部分。   


  如果你对使用微软的解决方案不感兴趣,还有一些很好的第三方的方案可以使用。一家名为ActiveCrypt 的软件有限责任公司制造了XP_CRYPT ,它是SQL Server的插件,可以在视图、程序和触发器中通过扩展存储过程和用户自定义函数(在SQL Server 2000中)来完成加密。你可以下载一个支持无线的MD5,DES ,以及SHA1哈希的免费版本的应用程序; 其他的加密模型就是在比特深度上进行的。(完全版本是无限的。)在你自己的代码中,你可以使用XP_CRYPT,与ActiveX 控制一样(在受限的免费版本中)。对于ASP程序员来说,一个名为AspEncrypt 的组件提供了一种将高级加密整合到你的代码中的简单方式。


  对数据库文件自身进行加密或者提供传输层上的安全保护怎么样?对于前者,大家可以在Windows系统中持续使用加密文件系统。然而,你必须保存加密密钥的备份,在出现问题的时候,这个数据有可能会丢失。对于后者,有IPSec和SQL Server自己的SSL加密,都是SQL Server和Windows自带的大家的主要精力应该放在避免以明文存储敏感数据,因为从数据库中抽取没有加密的数据同样是最容易受到攻击的薄弱环节。

相关文章:

  • 唱歌的方法与技巧[收集]
  • 2016 “Better Software East/DevOps East/Agile Dev East”三个会议上的发言
  • as3corelib系列教程之一:ArrayUtil类的用法
  • 【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(一)
  • HSRP的工作原理
  • 概率图常见模型
  • NTpassword(MD4)
  • 测试PHP
  • Cookie、LocalStorge、SesstionStorge 的区别和用法
  • regsvr32的用法
  • heroku 上部署node.js的几个注意点
  • 测测你的寿命还剩多少年?
  • Spring MVC——创建第一个项目(搭建步骤)
  • 班组建设浅析2
  • JSP学习笔记(五十二):Web服务启动时自动加载Servlet,并读取数据库内容
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 10个确保微服务与容器安全的最佳实践
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • crontab执行失败的多种原因
  • echarts花样作死的坑
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JavaScript设计模式之工厂模式
  • miaov-React 最佳入门
  • node-glob通配符
  • python3 使用 asyncio 代替线程
  • Sublime text 3 3103 注册码
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 原生 js 实现移动端 Touch 滑动反弹
  • Java数据解析之JSON
  • Mac 上flink的安装与启动
  • 正则表达式-基础知识Review
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (007)XHTML文档之标题——h1~h6
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)德国人的记事本
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .NET学习教程二——.net基础定义+VS常用设置
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .NET中统一的存储过程调用方法(收藏)
  • .net专家(张羿专栏)
  • .sys文件乱码_python vscode输出乱码
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116