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

这篇具有很好参考价值的文章主要介绍了Sql Server数据库实现表中字段的列加密研究。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

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

        不过此时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;

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

         在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 MyTestAsymmetric
    WITH ALGORITHM = RSA_2048
    ENCRYPTION BY PASSWORD = '%^&123%456';
GO

insert 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 MyTestSymmetric
    WITH ALGORITHM = AES_256
    ENCRYPTION 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的话,那么在加解密的时候会把密钥暴露给开发人员Sql Server数据库实现表中字段的列加密研究

Sql Server数据库实现表中字段的列加密研究 所以就不太安全!用证书的话就不会把密码暴露给开发人员,只暴露给特定的账户!

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新建登录名文章来源地址https://www.toymoban.com/news/detail-447997.html

到了这里,关于Sql Server数据库实现表中字段的列加密研究的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 主流数据库(SQL Server、Mysql、Oracle)通过sql实现多行数据合为一行

    1、方法一:使用 STUFF 和 FOR XML PATH 进行多行合并成一行 (1)FOR XML PATH用法 FOR XML 是 SQL Server 提供的一种功能,允许您将查询结果转换为 XML 格式。 PATH 模式则是其中一种灵活的方式来构造自定义的XML结构。 1、基本字符串连接 : 当您想从单列中提取所有行的数据并连接成一

    2024年04月10日
    浏览(40)
  • 在SQL server中用sql语句实现数据库的备份以及还原

    本文给大家提供并讲解了在SQL server中用SQL语句实现数据库的备份已经还原 假设你已经有一个数据库Student 创建备份设备,其名称为bk_Student,保存文件为D: Student.bak,并对Student数据库进行完全备份,备份到备份设备bk_ Student中。  在Student数据库中,创建一张表temp并对Student数

    2024年02月03日
    浏览(35)
  • Excel 2019访问SQL Server数据库的实现过程

    源之:https://vip.kingdee.com/article/288066926977041920?productLineId=11 在日常ERP系统实施过程中,往往会遇到客户的一些个性化需求,比如有些客户习惯用Excel电子表格来查看ERP系统中的数据,业余拓展学习了一下,借助ODBC可以实现这个需求。 一、ODBC数据管理和SQL数据库之间的连接的建

    2024年02月11日
    浏览(35)
  • JDBC如何连接SQL Server数据库实现增删改查

    目录 一、连接前准备  1. 环境配置  2. 下载JAR包 3. 添加环境变量 4. 导入JDBC包  二、连接SQL Server  三、实现增删改查 1. 查询数据 2. 添加数据 3. 修改数据 4. 删除数据 5. 拓展 JDBC的全称是Java数据库连接 (Java DataBase Connectivity) ,应用程序通过JDBC连接到数据库,使用SQL语句对数

    2024年02月03日
    浏览(46)
  • 内网穿透实现在外远程SQL Server数据库 - Windows环境

    目录 前言 1. 本地安装配置SQL Server 2. 将本地sqlserver服务暴露至公网 2.1 本地安装cpolar内网穿透 2.2 创建隧道 3. 公网远程连接sqlserver 3.1 使用命令行远程连接sqlserver, 3.2 使用图形界面远程连接sqlserver 3.3 使用SSMS图形界面远程连接sqlserver 4. 配置固定TCP端口地址 4.1 保留固定TCP地址

    2023年04月20日
    浏览(43)
  • CentOS本地部署SQL Server数据库无公网ip环境实现远程访问

    GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对要素数据进行更新、删除、插入操作,通过GeoServer可以比较容易地在用户之间迅速共享空间地理信息。另外,GeoServer是开源软件。 下面介绍GeoServer web ui 管理界面 结合cpolar 内网穿透工具实

    2024年01月25日
    浏览(33)
  • Linux系统部署SQL Server结合内网穿透实现公网访问本地数据库

    简单几步实现在Linux centos环境下安装部署sql server数据库,并结合cpolar内网穿透工具,创建安全隧道将其映射到公网上,获取公网地址,实现在外异地远程连接家里/公司的sqlserver数据库,而无需公网IP,无需设置路由器,亦无需云服务器。 下载 SQL Server 2022 (16.x) Red Hat 存储库配

    2024年04月10日
    浏览(44)
  • Linux centos安装SQL Server数据库,结合cpolar内网穿透实现公网访问

    简单几步实现在Linux centos环境下安装部署sql server数据库,并结合cpolar内网穿透工具,创建安全隧道将其映射到公网上,获取公网地址,实现在外异地远程连接家里/公司的sqlserver数据库,而无需公网IP,无需设置路由器,亦无需云服务器。 下载 SQL Server 2022 (16.x) Red Hat 存储库配

    2024年02月08日
    浏览(33)
  • 如何在CentOS安装SQL Server数据库并实现无公网ip环境远程连接

    简单几步实现在Linux centos环境下安装部署sql server数据库,并结合cpolar内网穿透工具,创建安全隧道将其映射到公网上,获取公网地址,实现在外异地远程连接家里/公司的sqlserver数据库,而无需公网IP,无需设置路由器,亦无需云服务器。 下载 SQL Server 2022 (16.x) Red Hat 存储库配

    2024年02月21日
    浏览(34)
  • 探索内网穿透工具:实现局域网SQL Server数据库的公网远程访问方法

    数据库的重要性相信大家都有所了解,作为各种数据的电子资料夹,其中可能包含了各种信息,从企业员工信息到网站访问或成交数据无所不包,甚至在某些场景下,数据库已经成为企业正常运行必不可少的条件之一。与企业的其他工作一样,数据库也需要进行必要的维护。

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包