仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 795|回复: 6
打印 上一主题 下一主题

[学习教程] Sql Server数据的加密与解密

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
BDB源自BerkeleyDB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性在sqlserver中,我们怎样为数据举行加密与解密,制止利用者夺取秘密数据?

关于一些敏感数据,如暗码、卡号,一样平常不克不及利用一般数值来存储。不然会有平安隐患。以往的加密解密都有前端使用程序来帮助完成。而数据库一样平常只能加密不克不及解密。

从2005入手下手供应了数据库层面的数据加密与解密。实在现体例次要有以下:

1、使用CONVERT改动编码体例:
使用该函数把笔墨或数据转换成VARBINARY。但该体例不具有回护数据的才能,仅制止扫瞄数据的过程当中能间接看到敏感数据的感化。
示例:
CREATETABLEt_test
(
userIDINTIDENTITY(1,1),
userNameVARCHAR(10),
userSalaryFLOAT,
cyberalaryNVARCHAR(MAX)
);

INSERTINTOt_test
(userName,userSalary)
selecttaici,1234
unionall
selecthailong,3214
unionall
selectmeiyuan,1111

--ALTERTABLEtest
--ADDuserNewSalaryVARBINARY(512)
--利用转换函数把数据转换成varbinary,改动编码体例。
SELECT*,CONVERT(VARBINARY(512),userSalary)FROMt_test

--把数据转换成int,能够恢回复有编码体例
SELECT*,CONVERT(INT,userSalary)FROMt_test


2、使用对称密钥:
搭配EncryptByKey举行数据加密。利用DecryptByKey函数举行解密。这类体例对照合适年夜数据量。由于对称密钥的历程好用资本较少。
示例:
--创立对称密钥
CREATESYMMETRICKEYSymKey123
WITHALGORITHM=TRIPLE_DESENCRYPTIONBYPASSWORD=P@ssw0rd
GO
--注重事项:在启用时,必要先OPENSYMMETRICKEY搭配密钥暗码,不然所发生的数据城市是null值。并且必要搭配Key_GUID函数来利用
--翻开对称密钥
OPENSYMMETRICKEYSymKey123DECRYPTIONBYPASSWORD=P@ssw0rd;
--举行数据加密
SELECT*,ENCRYPTBYKEY(KEY_GUID(SymKey123),CONVERT(VARCHAR(max),AddressLine1))
FROMPerson.Address

--把加密后数据更新到本来别的的列上
UPDATEPerson.Address
SETAddressLine2=ENCRYPTBYKEY(KEY_GUID(SymKey123),CONVERT(VARCHAR(max),AddressLine1))
--解密:解密历程一样必要OPENSYMMETRICKEY,且必要使用DECRYPTBYKEY和CONVERT函数
OPENSYMMETRICKEYSymKey123DECRYPTIONBYPASSWORD=P@ssw0rd;

SELECTAddressID,CONVERT(VARCHAR(MAX),CONVERT(VARCHAR(MAX),DECRYPTBYKEY(AddressLine2)))
FROMPerson.Address


3、使用非对称密钥:
搭配EncryptByAsymKey举行数据加密。利用DecryptByAsymKey函数举行解密。用于更高平安级其余加解密数据。由于耗用资本叫多。
示例:
--非对称密钥利用两种分歧的密钥,以是加密是是不必要输出暗码考证,但解密时就必要
CREATEASYMMETRICKEYAsymKey123WITHALGORITHM=RSA_2048ENCRYPTIONBYPASSWORD=P@ssw0rd;
GO

--增加新列存储加密后的数据
ALTERTABLEPerson.AddressADDAddressLine3nvarchar(MAX)
GO

--举行加密
SELECT*,ENCRYPTBYASYMKEY(ASYMKEY_ID(AsymKey123),CONVERT(VARCHAR(MAX),AddressLine1))
FROMPerson.Address
GO

--把数据更新到一个新列
UPDATEPerson.Address
SETAddressLine3=ENCRYPTBYASYMKEY(ASYMKEY_ID(AsymKey123),CONVERT(VARCHAR(MAX),AddressLine1))

SELECT*--addressline3
FROMPerson.Address

--解密:此历程必定要利用暗码来解密,此处的范例要与加密时不异,好比加密时用varchar,而这里用nvarchar的话是解密不了的。
SELECTTOP10AddressID,CONVERT(VARCHAR(MAX),CONVERT(VARCHAR(MAX),DECRYPTBYASYMKEY(ASYMKEY_ID(AsymKey123),AddressLine3,NP@ssw0rd)))ASDecryptedata
FROMPerson.Address


4、使用凭据的体例:
搭配EncryptByCert举行加密和DecryptByCert函数举行解密。对照相似非对称密钥。
示例:
CREATECERTIFICATEcertKey123--证书名
ENCRYPTIONBYPASSWORD=P@ssw0rd--暗码
WITHSUBJECT=AddressCertificate,--证书形貌
START_DATE=2012/06/18,--证墨客效日期
EXPIRY_DATE=2013/06/18;--证书到期日
GO
--使用证书加密
SELECT*,ENCRYPTBYCERT(CERT_ID(certKey123),CONVERT(VARCHAR(MAX),AddressLine1))cyberAddress
FROMPerson.Address

--增加新列寄存加密数据
ALTERTABLEPerson.AddressADDAddressLine4Nvarchar(MAX)

--把加密后数据放到新列
UPDATEPerson.Address
SETAddressLine4=ENCRYPTBYCERT(CERT_ID(certKey123),CONVERT(VARCHAR(MAX),AddressLine1))

--解密
SELECTAddressID,CONVERT(VARCHAR(MAX),CONVERT(VARCHAR(MAX),DECRYPTBYCERT(CERT_ID(certKey123),AddressLine4,NP@ssw0rd)))DecryAddressu)FROMPerson.Address


5、使用暗码短语体例:
搭配EncryptBypassPhrase举行加密,利用DecryptByPassPhrase函数来解密。可使用成心义的短语或其他数据行,当做加密、解密的关头字,对照合适一样平常的数据加解密。
示例:
--短语加密:该历程较为复杂,只必要利用EncryptByPassPhrase函数,利用短语加密时,参考的数据航不成以变化,不然解密失利。
SELECT*,AddressLine5=ENCRYPTBYPASSPHRASE(P@ssw0rd,CONVERT(varbinary,AddressLine1),AddressID)
FROMPerson.Address

--增加新列寄存数据,注重,ENCRYPTBYPASSPHRASE函数前往的是VARBINARY范例
ALTERTABLEPerson.AddressADDAddressLine5VARBINARY(256)

--将数据更新,过程当中利用P@ssw0rd和AddressID数据行当做暗码短语
UPDATEPerson.Address
SETAddressLine5=ENCRYPTBYPASSPHRASE(P@ssw0rd,CONVERT(varbinary,AddressLine1),AddressID)

SELECT*FROMPerson.Address
在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的:
深爱那片海 该用户已被删除
沙发
 楼主| 发表于 2015-2-4 20:37:25 | 只看该作者
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
柔情似水 该用户已被删除
板凳
发表于 2015-2-10 09:17:02 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
若相依 该用户已被删除
地板
发表于 2015-3-1 08:56:36 | 只看该作者
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
因胸联盟 该用户已被删除
5#
发表于 2015-3-10 16:09:48 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
小魔女 该用户已被删除
6#
发表于 2015-3-17 09:08:07 | 只看该作者
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
爱飞 该用户已被删除
7#
发表于 2015-3-24 04:53:31 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 13:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表