1、问题描述

去年6月份的时候做过一个系统,要对里面的一些敏感字段进行一下加密。Sqlserver列加密可以参考官方文档:SQL Server 技术文档 - SQL Server | Microsoft Learn。主要看下来有三种加密方法:1、利用证书对数据进行加密和解密。2、利用非对称密钥对数据进行加密和解密。3、利用对称密钥对数据进行加密和解密。

2、加密方法介绍

2.1、证书加密(推荐)

2.1.1、创建证书

use mydb;--查看数据库中的证书
select * from sys.certificates;--创建数据库主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123@#456';--创建证书
CREATE CERTIFICATE MyCert
with SUBJECT = 'My Test Certificate'
GO--创建证书并授权给指定用户(zhangsan)
CREATE CERTIFICATE MyCertToZhangSan AUTHORIZATION zhangsan
with SUBJECT = 'My Test Certificate To ZhangSan'
GO

2.1.2、使用证书加解密

创建一个测试表

--创建测试表TUser_test_Cert,要对pwd字段进行加密因此其字段类型设为varbinary
--varbinary表示可变长度二进制数据,但是在sqlserver表存放是以十六进制存的。
create table TUser_test_Cert(username varchar(50),pwd varbinary(2000));

在2.1.1环节一共建了两个证书,MyCert这个证书是公用的,而MyCertToZhangSan这个证书是仅限zhangsan这个用户可以使用!

使用MyCert证书加解密

--使用MyCert证书加密pwd字段
insert into TUser_test_Cert(username,pwd) values('liming',ENCRYPTBYCERT(CERT_ID('MyCert'),'112233')
);select * from TUser_test_Cert;--使用MyCert证书解密pwd字段
select username,CONVERT(
varchar(100),
DecryptByCert(CERT_ID('MyCert'),pwd)
) as pwd from TUser_test_Cert;

使用MyCertToZhangSan证书进行加解密

因为我是对mydb数据库进行证书加解密嘛!因此首先要确保mydb下是否有zhangsan这个用户!有了zhangsan这个用户才能创建证书并对其AUTHORIZATION

有个地方要提一下,这里的zhangsan这个用户是在mydb下的,并不是直接在mydb下直接手动创建的,而是整个sqlserver登录名zhangsan映射到mydb的一个用户映射!

其实就是在你新建数据库登录名的时候做的一个用户映射,相当于授权这个登录名可以有哪些数据库的权限了!

不过此时mydb新加的zhangsan这个用户还没有给他分配角色(所谓角色就是权限集合)

--创建一个角色zhangsan_role
create role zhangsan_role;
--给zhangsan_role这个角色分配TUser_test_Cert表的增删改查权限
grant select,update,insert,delete on TUser_test_Cert to zhangsan_role;

在mydb里用户选择zhangsan右键属性,在成员身份里选中zhangsan_role就行了!

--使用MyCertToZhangSan证书加密pwd字段
insert into TUser_test_Cert(username,pwd) values('zhangsan',ENCRYPTBYCERT(CERT_ID('MyCertToZhangSan'),'666333')
);select * from TUser_test_Cert;--使用MyCert证书解密pwd字段
select username,CONVERT(
varchar(100),
DecryptByCert(CERT_ID('MyCertToZhangSan'),pwd)
) as pwd from TUser_test_Cert;

2.2、非对称密钥加解密

----利用非对称密钥对数据进行加密和解密-----查看数据库中的非对称密钥
select * from sys.asymmetric_keys;--创建非对称密钥
CREATE ASYMMETRIC KEY MyTestAsymmetricWITH ALGORITHM = RSA_2048ENCRYPTION BY PASSWORD = '%^&123%456';
GOinsert into TUser_test_Cert(username,pwd) values('ssan',EncryptByAsymKey(ASYMKEY_ID('MyTestAsymmetric'),'112233')
);select * from TUser_test_Cert;select username,CONVERT(
varchar(100),
DecryptByAsymKey(ASYMKEY_ID('MyTestAsymmetric'),pwd,N'%^&123%456')
) as pwd from TUser_test_Cert;

2.3、对称密钥加解密

----利用对称密钥对数据进行加密和解密------查看数据库中的对称密钥
select * from sys.symmetric_keys;--创建对称密钥
CREATE SYMMETRIC KEY MyTestSymmetricWITH ALGORITHM = AES_256ENCRYPTION BY PASSWORD = '123456@aes';
GO
--打开密钥并进行加密/解密(只有对称加密需打开密钥!!!)
open symmetric key MyTestSymmetric decryption by password='123456@aes';insert into TUser_test_Cert(username,pwd) values('qianqian',EncryptByKey(Key_GUID('MyTestSymmetric'), 'qw123sa')
);select * from TUser_test_Cert;select username,CONVERT(
varchar(100),
DECRYPTBYKEY(pwd)
) as pwd from TUser_test_Cert

3、总结

Sqlserver数据库列字段加密推荐使用证书加密,使用证书加密是对特定的账号授予他们使用证书加解密的权限,他们只是用了证书的cert_id,并不会涉及password密钥。但如果使用其他方法加密的话,比如AES,RSA的话,那么在加解密的时候会把密钥暴露给开发人员

 所以就不太安全!用证书的话就不会把密码暴露给开发人员,只暴露给特定的账户!

4、参考资料

创建数据库主密钥 - SQL Server | Microsoft Learn

通俗易懂的对称加密与非对称加密原理浅析 - 掘金

SQL Server 数据库对称加密_QAQ_的博客-CSDN博客

AES加密算法的详细介绍与实现_TimeShatter的博客-CSDN博客_aes

SQLSERVER加密解密函数(非对称密钥 证书加密 对称密钥)_weixin_33877092的博客-CSDN博客

获取所有用户名 sql server_jgwei的博客-CSDN博客_sqlserver 查看数据库所有用户名

[转]【SQLServer】获取SQL Server数据库用户名、数据库名、所有表名、所有字段名_liujzss的博客-CSDN博客

SQL Server 创建登录名和用户名【详细介绍】_Henry_626的博客-CSDN博客_sqlserver新建登录名

Sql Server数据库实现表中字段的列加密研究相关推荐

  1. SQL Server 数据库词汇表

    SQL Server 数据库词汇表 词汇 词义 Activation 激活 ActiveX Data Objects(ADO) ActiveX 数据对象 ActiveX Data Objects(Mu ...

  2. SQL Server数据库mdf文件中了勒索病毒.FREEMAN。扩展名变为FREEMAN

    SQL,数据库,勒索病毒,mdf文件中毒,FREEMAN SQL Server数据库mdf文件中了勒索病毒.FREEMAN.扩展名变为FREEMAN ***.ldf.FREEMAN ***.mdf.F ...

  3. SQL Server数据库mdf文件中了勒索病毒BUNNY。扩展名变为BUNNY

    SQL Server数据库mdf文件中了勒索病毒BUNNY.扩展名变为BUNNY ***.ldf.BUNNY ***.mdf.BUNNY ***.ldf.BUNNY ***.mdf.BUNNY SQL ...

  4. SQL Server数据库mdf文件中了勒索病毒***.mdf.Horse4444。扩展名变为Horse4444

    SQL,数据库,勒索病毒,mdf文件中毒,Horse4444 SQL Server数据库mdf文件中了勒索病毒***.mdf.Horse4444.扩展名变为Horse4444 ***.ldf.Hors ...

  5. SQL Server数据库mdf文件中了勒索病毒 mercury。扩展名变为 mercury

    2019-01-24 15:57:27 SQL,数据库,勒索病毒,mdf文件中毒,mercury *SQL Server数据库mdf文件中了勒索病毒.mdf.mercury.mercury SQL S ...

  6. sql server:删除表数据,标识列Id从1开始

    今天是元宵节,楼猪认为在这么热闹和喜庆的日子里,不写上一篇惊世骇俗的大作,嗯,也没什么大不了的. 在sql server数据库上创建有自增列的数据表,每次删除表的数据后,自增主键都无法自动从1开始计数 ...

  7. MS Sql Server 数据库或表修复(DBCC CHECKDB)

    MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令.  1. DBCC CHECKDB  重启服务器后,在没有进行任何操作的情况下,在SQL ...

  8. SQL Server数据库建表

    在SQL Server Management Studio的对象资源管理器中创建表 在想要新建表的数据库下面,选中"表"右键-->"新建表"-->为 ...

  9. SQL Server打开数据表中的XML内容时报错的解决办法

    从SQL Server2005开始提供了一种新的数据类型XML type,它允许用户将数据以XML文件的格式直接存储到数据表中.结合在ASP.NET中使用Linq to Sql,我们可以非常方便地将X ...

最新文章

  1. java内部类和静态内部类的区别
  2. ​Nature子刊 | 睡眠时型会影响人类大脑生理的认知功能
  3. Scala入门到精通——第十节 Scala类层次结构、Traits初步
  4. Windows和Linux如何使用Java代码实现关闭进程
  5. ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线
  6. 解决[ERROR] [MY-013276] [Server] Failed to set datadir to ‘F:\Mysql\mysql-8.0.19-winx64\data\‘ (OS er
  7. 登录cookie html,cookie注册
  8. 如何根据原理图画封装_如何在短时间内,吃透三极管工作原理,开关导通和封装外形知识点?...
  9. Spring mvc @RequestHeader
  10. jQuery -gt; end方法的使用方法
  11. flash air java_flashair安卓版
  12. win7 开启梦幻桌面
  13. 张飞电子工程师速成视频教程百度云_张飞电子工程师速成视频教程第二部
  14. 电阻(1)电阻种类篇
  15. 【二维码】艺术二维码生成
  16. 渗透测试工具篇——sqlmap
  17. 关于单相变频电源及变频电路部分介绍
  18. Kafka之Fetch offset xxx is out of range for partition xxx,resetting offset情况总结
  19. python的故事--我抄的,但抄的可以,是一个叫栋哥的电台讲的
  20. 用python提取不同的两列数据对比_比较两列数据fram中的值

热门文章

  1. 2020全国大学生网安邀请赛暨第六届上海市大学生网安大赛-千毒网盘
  2. 参观东方四通科技股份有限公司、无锡蓝海华腾股份有限公司、无锡康博瑞特电子科技有限公司记录
  3. (转)央视:地产三剑客论房价上涨真相及住房投资
  4. python如何多行输出_python换行输出 Python里具体怎么用\n换行输出一个数字?
  5. 数据仓库项目——数据准备
  6. 【PS3模拟器N2N私服联机教程】
  7. sqlserver 还原出错
  8. 快速删除所有空值:汪琪玩Excel第十四招
  9. 上美集团吕义雄:跨界营销新玩法
  10. vue--elementui中修改el-input样式