数据库大师成长日记:SQL Server如何防止开发人员获取敏感数据

朋友们,我们在使用SQLServer数据库的时候,数据库表的字段值都是公开的。如果您是项目负责人,知道所有实际数据无可厚非,但如果这些数据比较敏感,您并不希望开发团队的其他人员知道该怎么办呢?

在上一篇《SQL Server如何进行元数据底层加密》中,我详细说明了SQL Server数据加密用到的各种SQL语法,这一讲我们结合实例实战一下对数据库字段进行加密的方法和过程。

比如您是项目负责人,要给客户开发一个工资系统。一般企业的工资都是保密的,如果您直接把工资信息都明文放在数据库中,您的开发团队的每个人都很容易知道客户员工的工资。如果客户是个大企业,这其中的风险我不说您应该也很清楚。

我们就以最简化的工资表为例,说明如何对敏感信息进行加密。如果您对加密用到的SQL语法不是很了解,建议您可以先回头看看我上一篇的相关描述。

第一步,创建数据库主密钥

  1. CREATE MASTER KEY ENCRYPTION BY PASSWORD =‘SysKey‘
  2. GO

这里创建了数据库主密钥,比如密码是‘SysKey‘。主密钥只需要创建一次。

第二步,创建证书

  1. CREATE CERTIFICATE MYCERT
  2. with SUBJECT = ‘My Cert‘
  3. GO

这里创建了证书MYCERT,证书的元数据中的字段为‘My Cert‘。证书创建一次,以后解密时需要先Open。

第三步,创建对称密钥

  1. CREATE SYMMETRIC KEY MYKEY
  2. WITH ALGORITHM = AES_256
  3. ENCRYPTION BY CERTIFICATE MYCERT;
  4. GO

这里基于证书MYCERT创建了密钥MYKEY,加密算法为AES_256。加密算法有好几种。

前三步做完之后,我们可以在资源管理器中看到我们的证书和密钥信息,如下图所示:

第四步:加密解密有效性测试

我们先通过变量测试加密解密的有效性:

  1. OPEN SYMMETRIC KEY MYKEY DECRYPTION BY CERTIFICATE MYCERT;
  2. declare @key varbinary(MAX);
  3. set @key=EncryptByKey(key_guid(‘MYKEY‘),‘20000.00‘);
  4. select @key;
  5. select convert(varchar(100), DecryptByKey(@key));

在解密之前,要先打开我们定义的密钥,通过:

  1. OPEN SYMMETRIC KEY NCSK DECRYPTION BY CERTIFICATE NCSC;

这句打开密钥,如果不先打开密钥,返回的将会是NULL。

运行参考结果参考下图:

第五步,准备使用的数据

为了描述方便,我们创建一个工资表变量:

  1. declare @Salary table(
  2. FName nvarchar(50),
  3. FSalary varbinary(MAX));

这里要注意,存放加密数据的字段要设置成varbinary类型。

第六步,插入加密数据

插入时,要使用函数EncryptByKey对文本进行加密,通过函数key_guid获取密钥,加密后的数据类型为varbinary。

  1. insert into @Salary(FName,FSalary)
  2. values
  3. (‘张三‘,EncryptByKey(key_guid(‘MYKEY‘),‘20000.00‘)),
  4. (‘李四‘,EncryptByKey(key_guid(‘MYKEY‘),‘25000.00‘)),
  5. (‘王二‘,EncryptByKey(key_guid(‘MYKEY‘),‘30000.00‘));

第七步:数据读取

读取数据时需要调用函数DecryptByKey解密,通过Convert将解密后的Varbinary转换成varchar类型。

  1. select *,convert(varchar, DecryptByKey(FSalary)) from @Salary;

完整的处理请参考下图:

怎么样,整个过程不复杂吧。希望对您有所帮助!

原文地址:https://www.cnblogs.com/syncnavigator/p/10198287.html

时间: 2024-08-03 20:52:37

数据库大师成长日记:SQL Server如何防止开发人员获取敏感数据的相关文章

数据库大师成长日记:巧用SQL语句查看SQL Server的结构信息

常用SQLServer的朋友们,绝大部分情况下,我们写SQL脚本主要用来处理我们自己的数据,比如读取.插入数据等.但在有些情况下,我们可能要查看我们定义的一些元素,比如我们定义的表都有哪些.表结构如何.存储过程的源码等等.这时候,我们学习的常规的SQL脚本可能就无法处理了. 比如您要写一个管理数据库的程序,就要知道数据库中有什么表.表结构如何,以及视图.存储过程的脚本源码等.下面我就说说如何获取数据库的结构信息. 获取数据库及配置信息 1.获取数据库配置信息 exec sp_server_inf

数据库大师成长日记:巧用SQL语句,小技巧解决大问题!

朋友们,我们在写SQL脚本的时候,可能一些看起来不起眼的小问题.却让我们非常头疼.比如我们要写一个备份数据库的脚本,如果我们对服务器的硬盘分区和使用情况很了解,备份当然没有问题,但如果我们不知道服务器硬盘如何分区.每个分区还有多少空间可用的情况下,您写的备份语句可能就不好执行了. 下面,我就日常我们可能会碰到的一些"大问题",通过简单的SQL脚本进行实现. 查看硬盘分区与可用空间 这个通过调用master数据库下面的存储过程xp_fixeddrives很容易实现. EXEC maste

数据库大师成长日记:您最需要了解的NoSQL非关系型数据库

朋友们,我们平时使用的数据库,大多都是关系型数据库,包括MySQL.PostgreSQL.SQLServer等.关系型数据库的特点是数据的存储通过二维表格实现,将数据存储在相互独立的表格中. 近年来,随着互联网的飞速发展,数据的形态发生了很大改变,非关系型数据库NoSQL应运而生.越来越流行.NoSQL主要包括键值(Key-Value)存储数据库.列存储(Column-oriedted)数据库.面向文档(Document-Oriented)数据库.图形(Graph)数据库四种,下面介绍三款最常用

此数据库文件与当前sql server实例不兼容

在vs2015导入mdf数据库文件时提示:此数据库文件与当前sql server实例不兼容. mdf文件的版本是SQL SERVER 2005的,而VS2015自带的数据库是LocalDB,直接导入该mdf文件时会提示:此数据库文件与当前sql server实例不兼容. 解决方法是把sql server 2005的mdf文件转成LocalDB可操作的mdf文件. 以下是操作方法,直接用VS2015即可完成, 不需要安装SQL SERVER. 服务器资源管理器 -> 连接到数据库 服务器名:直接填

sql数据库恢复 文件丢失误删除 误格式化置疑报错修复 数据库置疑修复总结/SQL SERVER 2000/2005/2008/2008R2

数据库置疑的原因会有多种多样,不同的问题采用的步骤也会有所不同,以下的步骤不能适用所有的情况,但包括了一些基本的步骤. 数据库置疑是指数据库内部处于不一致的状态,很有可能会有数据丢失.我们推荐您从做数据库备份之前,检查过DBCC  CHECKDB没有错误,备份的数据库没有更改.    1.首先确认已经备份了.mdf和.ldf文件. 2. 在SQL Server中新建一个同名的数据库,然后停止SQL Server服务. 3. 用原有的.mdf和.ldf文件覆盖新建数据库对应的.mdf和.ldf文件

最佳实践 · 实例级别数据库上云RDS SQL Server

摘要: 摘要 到目前,我们完成了SQL Server备份还原专题系列八篇月报分享:三种常见的数据库备份.备份策略的制定.查找备份链.数据库的三种恢复模式与备份之间的关系.利用文件组实现冷热数据隔离备份方案.如何监控备份还原进度.阿里云RDS SQL自动化迁移上云的一种解决方案以及上个月分享的RDS SDK实现数据库迁移上阿里云,本期我们分享如何将用户线下或者ECS上自建实例级别数据库一键迁移上阿里云RDS SQL Server. 摘要到目前,我们完成了SQL Server备份还原专题系列八篇月报

[MS]Microsoft SQL Server 2008 R2 开发版/企业版/标准版

Microsoft? SQL Server? 2008 R2 是一个功能强大且可靠的数据管理系统,它功能丰富,能保护数据,并且可改善嵌入式应用程序.轻型网站和应用程序以及本地数据存储区的性能. 数据中心版:PTTFM-X467G-P7RH2-3Q6CG-4DMYB(可用,已验证)DDT3B-8W62X-P9JD6-8MX7M-HWK38(待测) 开发版:MC46H-JQR3C-2JRHY-XYRKY-QWPVM (可用,已验证)FTMGC-B2J97-PJ4QG-V84YB-MTXX8(待测)

接着上一篇,把刚才SQL Server Data Tools 开发的报表复制到 重新部署到微软Dynamics CRM 系统中

报表开发好了,要应用到系统中呢,下面教大家如何把Visual studio或者SQL Server Data Tools 开发的报表导入到系统中. 进入, 销售---报表 ,点 新建 点 "浏览" 定位到报表保存的文件夹.一般在我的文档中 Projects 点 "保存并关闭" 好了,看到了吧,分配权限就可以使用了,是不是很简单啊. 下面是逆向操作,报表导出. 保存即可以.

SQL Server中是否可以准确获取最后一次索引重建的时间?

原文:SQL Server中是否可以准确获取最后一次索引重建的时间? 在SQL Server中,我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild)的时间? 最后一次索引重组(INDEX REORGANIZE)的时间呢?  答案是我们无法准确的找到索引的创建时间.最后一次索引重组时间,最后一次索引重建的时间. 其实就目前SQL Server的各个版本而言,还没有一个系统表或DMV视图有保存索引创建的时间,索引重建的时间.索引重组的时间.但是有些方法可以间接得到最后一次索引重