好贷网好贷款

大牛,请帮忙提点建议 200bean_sql]

发布时间:2016-12-3 6:20:13 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"大牛,请帮忙提点建议 200bean_sql]",主要涉及到大牛,请帮忙提点建议 200bean_sql]方面的内容,对于大牛,请帮忙提点建议 200bean_sql]感兴趣的同学可以参考一下。

初次使用数据库的【对称证书加密技术】, 有如下问题想请教下: 1:如果之前创建的证书或者对称密钥丢失怎么办? 2:当我把数据库放到另外一台服务器,这些加密是否还能正常使用?(过会自己测试下) 3:备份 Master Key 、证书、对称密钥的作用 4:加密的算法,通常都使用哪些种类?目前使用的是DES。 5:加密后,以后要注意哪些事宜。 6:帮忙看下这个帖子: http://topic.csdn.net/u/20120615/12/12be04c7-c56d-40c6-8450-710366f079e3.html 以下是自己写的一个使用案例, 如果有不合适的地方,望指点下 if object_id('t_encryption','u') is not null drop table t_encryption  go create table t_Encryption ( DCNO int identity primary key, DCNAME varchar(50) , SalaryInfo varbinary(max) ) go ---------------------------------------------------创建加密证书 create certificate cert_SalaryInfo Encryption by [email protected]' with  subject=N'Salary Information Encryption', expiry_date='9999-12-31' -----删除证书  ----- drop certificate cert_SalaryInfo go ---------------------------------------------------创建对称加密 create symmetric key sym_SalaryInfo with  algorithm=DES    --使用DES 加密算法(*不知道原理) encryption by certificate cert_SalaryInfo ----删除对称加密 ----drop symmetric key sym_SalaryInfo go ---------------------------------------------------打开对称加密(插入数据前要打开对称加密,否则将无效) open symmetric key sym_SalaryInfo decryption by certificate cert_SalaryInfo with password [email protected]' go ---------------------------------------------------插入加密数据 insert into t_Encryption(DCNAME,SalaryInfo) select 'andy',ENCRYPTBYKEY(KEY_GUID('sym_SalaryInfo'),N'1000.00') union all  select 'job',ENCRYPTBYKEY(KEY_GUID('sym_SalaryInfo'),N'2000.03') go ---------------------------------------------------关闭密钥 close symmetric key sym_SalaryInfo go ---------------------------------------------------查询表数据 select * from t_Encryption /* DCNO        DCNAME                                             SalaryInfo ----------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------------- 1           andy                                               0x00A4EFE20ABB16458517D289B626ECB20100000060F12ABBD792B7C542DC8AAEC496A3796A9C0B7D454F56CAC6AA60763953B631 2           job                                                0x00A4EFE20ABB16458517D289B626ECB2010000003CAAC262CE95588561CA30139608AD380608F12F70E7271006702FA037D5AE1A (2 row(s) affected) */ go ---------------------------------------------------使用对称加密直接查看(不开启对称加密) select  DCNO, DCNAME, convert(nvarchar(500),DECRYPTBYKEY(SalaryInfo)) as SalaryInfo from t_Encryption /* DCNO        DCNAME                                              ----------- -------------------------------------------------- ------------------- 1           andy                                               NULL 2           job                                                NULL (2 row(s) affected) */ go --------------------------------------------------查询数据前要打开加密 open symmetric key sym_SalaryInfo decryption by certificate cert_SalaryInfo with password [email protected]' go select  DCNO, DCNAME, convert(nvarchar(500),DECRYPTBYKEY(SalaryInfo)) as SalaryInfo from t_Encryption /* DCNO        DCNAME                                             SalaryInfo ----------- -------------------------------------------------- ------------------ 1           andy                                               1000.00 2           job                                                2000.03 (2 row(s) affected) */ go --------------------------------------------------更新DCNO=1的salaryinfo 变为1500 update t_Encryption set SalaryInfo=ENCRYPTBYKEY(KEY_GUID('sym_SalaryInfo'),N'1500') where DCNO=1 go --------------------------------------------------再次插入一条记录 insert into t_Encryption(DCNAME,SalaryInfo) select 'Ivan',ENCRYPTBYKEY(KEY_GUID('sym_SalaryInfo'),N'3000') go select  DCNO, DCNAME, convert(nvarchar(500),DECRYPTBYKEY(SalaryInfo)) as SalaryInfo from t_Encryption /* DCNO        DCNAME                                             SalaryInfo ----------- -------------------------------------------------- --------------------- 1           andy                                               1500 2           job                                                2000.03 3           Ivan                                               3000 (3 row(s) affected) */ go --------------------------------------------------使用完成后一定要记住关闭掉 close symmetric key sym_SalaryInfo go --------------------------------------------------关闭后查询(在没有开锁的情况下) select  DCNO, DCNAME, SalaryInfo as SalaryInfo_, convert(nvarchar(500),DECRYPTBYKEY(SalaryInfo)) as SalaryInfo from t_Encryption /* DCNO DCNAME SalaryInfo_ SalaryInfo 1 andy 0x00A4EFE20ABB16458517D289B626ECB201000000DF23BA3059585CF3C6F0D3C3CA7EB685B201DAEAEF4351570FEE080D5927DD46 NULL 2 job 0x00A4EFE20ABB16458517D289B626ECB2010000003CAAC262CE95588561CA30139608AD380608F12F70E7271006702FA037D5AE1A NULL 4 Ivan 0x00A4EFE20ABB16458517D289B626ECB201000000D39FA6B1F9090FFC9488DD8947BD068D9B995776FC1A6E018DED081EA3150D5C NULL */

该回复于2012-06-16 12:17:28被版主删除

1:如果之前创建的证书或者对称密钥丢失怎么办? 这丢了就打不开了 2:当我把数据库放到另外一台服务器,这些加密是否还能正常使用?(过会自己测试下) 数据还是加密的。加密证书可以导入 3:备份 Master Key 、证书、对称密钥的作用 这个就可以帮助上面 4:加密的算法,通常都使用哪些种类?目前使用的是DES。 RSA ,MD5,SHA1 5:加密后,以后要注意哪些事宜。 保证钥匙不能掉。

不懂,帮顶,

该回复于2012-06-19 09:45:15被版主删除

想复杂了吧,你在程序中随便搞个什么加解密算法(选择看你的加密需要),在修改和插入前调用,写入库的全部是密文,谁看到也只能知道加密方法才能解开,或者说离开程序就看不到不就可以了。 数据库负责存储就行了。

引用 5 楼  的回复:想复杂了吧,你在程序中随便搞个什么加解密算法(选择看你的加密需要),在修改和插入前调用,写入库的全部是密文,谁看到也只能知道加密方法才能解开,或者说离开程序就看不到不就可以了。 数据库负责存储就行了。 使用这种方法应该可以的吧? CREATE TABLE tb(ID int IDENTITY(1,1),data varbinary(8000));  GO  INSERT tb(data)    SELECT EncryptByPassPhrase(N'这是密码',N'这是要加密的内容2');      --解密  select * from tb SELECT CONVERT(NVARCHAR(50),DECRYPTBYPASSPHRASE(N'这是密码,用来加密的',data)) ,     convert(nvarchar(50),DECRYPTBYPASSPHRASE(N'这是密码',data)) FROM tb   GO  DROP TABLE tb

如果数据不多当然可以,但是也很不好,主要是密码需要在每次查询给出来,被人一跟踪就泄密了 放在程序加解密的话,密码可以写在程序代码中,程序混淆好了就不容易泄密

友情帮顶,支持楼主。

还有一个,就是对性能的影响,查询时在数据库转换影响数据库性能,在程序中可以批量处理,速度应快些,至少不影响数据库性能。 对于作为条件的查询,程序可以加密后查询

如果使用 EncryptByPassPhrase 在程序里调用 数据库跟踪 是否能跟踪到解密语句 感觉程序执行 会转化成 SQL脚本的.. 引用 7 楼  的回复:如果数据不多当然可以,但是也很不好,主要是密码需要在每次查询给出来,被人一跟踪就泄密了 放在程序加解密的话,密码可以写在程序代码中,程序混淆好了就不容易泄密

什么数据库?2005还是2008还是2012? 程序加密后,再写入数据库 数据库读出后,程序解密了才能使用

数据库中使用加密函数,然后程序中再md5加密一次,貌似就相对安全了

md5加密后,无法取回原内容的 只能把用户输入的也md5一次,比较结果

上一篇:像世纪佳缘、百合网这类婚介网站用什么方法来实现对用户的搜索? 20分,无满意结帖,结帖人songruqi]
下一篇:单表40亿条记录的表分区 40qzxyd]

相关文章

相关评论