怎么实现对SQL Server数据库的字段进行加密和解密

怎么实现对SQL Server数据库的字段进行加密和解密,第1张

将那个字段设为主键

------解决方案--------------------------------------------------------

要不然

你只能在逻辑上做判断、先查询数据是否有当前的符号、如果有

就另填。没有的话,就插入

------解决方案--------------------------------------------------------

------解决方案--------------------------------------------------------

要是这个字段不是外键的话,可以设成主键,否则,可以由数据库的标识字段做主键,给这一列

加上唯一约束

------解决方案--------------------------------------------------------

主键或者unique

约束(这个oracle

有,不知sqlserver

有没有)。

这个好像不行吧。

------解决方案--------------------------------------------------------

设主键。用sequence

自增。设置主键

然后也可以写触发器做判断修改

当数据被存储时候被加密,它们被使用的时候就会自动加密。在其他的情况下,你可以选择数据是否要被加密。SQL Server数据库可以加密下列这些组件:密码存储过程,视图,触发器,用户自定义函数,默认值,和规则。

在服务器和用户之间传输的数据密码加密SQL Server自动将你分配给登陆和应用角色的密码加密。尽管当你可以从主数据库中直接察看系统表格而不需要密码。你不能给对这种情况作出任何修改,事实上,你根本不能破坏它。

定义加密在有些时候,如果对对象进行加密是防止将一些信息分享给他人。例如,一个存储进程可能包含所有者的商业信息,但是这个信息不能和让其他的人看到,即使他们公开的系统表格并可以看到对象的定义。这就是为什么SQL Server数据库允许你在创建一个对象的时候进行加密。为了加密一个存储进程,使用下面形式的CREAT PROCEDURE 语句:

CREATEPROCEDUREprocedurename[;number]

[@parameterdatatype

[VARYING][=defaultvalue][OUTPUT]]

[,]

[WITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]

我们关心的仅仅是可选的WITH参数。你可以详细说明ARECOMPILE或者ENCRYPTION,或者你可以同时说明它们。ENCRYPTION关键字保护SQL Server数据库它不被公开在进程中。结果,如果ENCRYPTION在激活的时候系统存储进程sp_helptext就会被忽视,这个存储进程将被存储在用户创建进程的文本中。

如果你不想要加密,你可以使用ALTER PROCEDURE,忽略WITH ENCRYPTION子句来重新创建一个进程。

为了能够使用加密。用户和服务器都应该使用TCP/IP NetworkLibraries用来连接。运行适当的Network Utility和检查Force protocol encryption,看下表,用户和服务器之间的连接将不会被加密。

加密也不能完全自由。当连接确定后源码天空

,要继续其他的构造,并且用户和服务器必须运行代码来解释加密和解释的包裹。这里将需要一些开销并且当在编译码的时候会使进程慢下来。

ACCESS只是做为一个文件,安全性由文件本身来控制的,但SQL做为大型数据库,本身设计就不是为移动方便而且,所以他的安全性,是由服务器硬件来控制的。

这好比,你对保险柜的安全性,是靠保险柜本身来控制的,比如钥匙,铁皮强度,但你的家具,床柜什么的,其安全性是由你家房间,大门来控制的,不能让家具自己来承担安全责任。

但是,你使用某个家且,安全性可由单个家且控制,所以,SQL数据在单独使用时,是通过程序的安全性来控制,SQL物理文件,你不能设置成说你不能附加回到SQL上,不能复制带走,不能从后台SQL中查看数据表。。。

对SQL加密?

SQL

SERVER

有自己的一套安全系统验证,它做的已经很好了

一般我们对SQL的加密都是对里面数据内容的加密,而常用的是密码的加密

现在常用的加密是MD5,把用户的密码加密后,保存到SQL数据库

还有一种是对分布式SQL的加密,就ASPNET

20而言,可以在webconfig文件里的SQL网络链接字符进行加密,以保证SQL

server的安全性

如有其他问题请提出,很高兴为你解答

/

1利用对称密钥

搭配EncryptByKey进行数据jiami

使用DecryptByKey函数进行jiemi

这种方式比较适合大数据量

/

CREATE SYMMETRIC KEY ZXC WITH ALGORITHM = AES_256 ENCRYPTION BY PASSWORD = 'ZXC123456'

OPEN SYMMETRIC KEY ZXC DECRYPTION BY PASSWORD = 'ZXC123456'

--jiami

SELECT Encryptbykey(Key_guid('ZXC'), 'YHDH_C')

--jiemi

SELECT CONVERT(VARCHAR(10), Decryptbykey(0x001B05DF93A12F4A941E64A06B9AEE94010000007582B2C772953F1A6ABC7298E126B76A22A6815115466653D11D6D1F23641DA6))

CLOSE SYMMETRIC KEY ZXC;

DROP SYMMETRIC KEY ZXC;

/

2利用非对称密钥

搭配EncryptByAsymKey进行数据jiami

使用DecryptByAsymKey函数进行jiemi

用于更高安全级别的加jiemi数据

/

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'XIAOMA'

CREATE ASYMMETRIC KEY ABC WITH ALGORITHM=RSA_2048 ENCRYPTION BY PASSWORD = 'ZXC123456'

ALTER ASYMMETRIC KEY ABC WITH PRIVATE KEY (DECRYPTION BY PASSWORD = 'ZXC123456')

--jiami

Select Encryptbyasymkey(Asymkey_id ('ABC'), 'ZXC123456')

SELECT CONVERT(VARCHAR(100), Decryptbyasymkey (Asymkey_id('ABC'),0xDA7081BE942896AE961589B5BC8ABDA88BF28DBECD4AB0F9EF1C1666591511BE4D2659EE01B8686002946A8EF7074B14CFFBFF042F21D4F86878EAD8B24E1CF29031D89315D20F70F456A69D74491652522035A0B394E412B0AF52198E665C3E163765A2095D654E6922E0F94E0FAD83C6C322E56C910DBEACD3FF98C912F153B4C701431A74E6A10EAF342491345B0D1D47C49B8895EB02E0152EABFC19A3FA4BD857F228B7082F0195DFEB82E734E0B0722798D2382D1F2FEC8203CCA302B8E80D06913A168C50011FD0A526A1088C55EA905AFB97AC414CBDACD4A28BCC4CD3CBDC8140851057A3E6882F17DA914ECFFC01A196B1F7E7B7AC3E945E106D82 ))

DROP ASYMMETRIC KEY ABC;

DROP MASTER KEY

/

3利用凭证的方式

搭配EncryptByCert进行jiami

DecryptByCert函数进行jiemi

比较类似非对称密钥

/

CREATE CERTIFICATE ZXC

ENCRYPTION BY PASSWORD = 'xiaoxiao'

WITH SUBJECT = 'DB_Encrypt_Demo Database Encryption Certificate',

START_DATE = '2015-10-1'

--jiami

Select Encryptbycert(Cert_id('ZXC'), '123456')

--jiemi

SELECT convert(Varchar(10), Decryptbycert(Cert_id('ZXC'), 0xB4E223CC08A73DE5AFE81A6FF14E76503CF55066EE8186F0781942E54B4FA97D3B49D9A16A102398311F9B259D3E2F23F0B35D3720F4AAB08357850D96A7E43494A306D227A29812BA62A33B39AC600D6585EA6B03F5F97A012C5A0BE7BC52FF60519421BD8D09311F10CC55EEA166FDBFAD2A5D9E2D3043A215AE27A918E35B,N'xiaoxiao'))

DROP CERTIFICATE ZXC;

/

4利用mima短语方式

搭配EncryptBypassPhrase进行jiami

使用DecryptByPassPhrase函数来jiemi

比较适合一般的数据加jiemi

/

--jiami

Select Encryptbypassphrase('xiaoma', '123456')

--jiemi

SELECT CONVERT(VARCHAR(100), Decryptbypassphrase('xiaoma',0x01000000435DFA417C8E1A1417D901357378A1864F721EAA53DCD800 ))

以上就是关于怎么实现对SQL Server数据库的字段进行加密和解密全部的内容,包括:怎么实现对SQL Server数据库的字段进行加密和解密、SQL数据库为什么需要更高一级的加密、sql server 2005怎么给单个数据库加密等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9301328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存