当前位置: 首页 > 科技观察

SQLServer如何防止开发者获取敏感数据

时间:2023-03-18 02:51:44 科技观察

朋友们,我们在使用SQLServer数据库的时候,数据库表的字段值都是公开的。如果您是项目负责人,知道所有实际数据是可以的,但是如果数据很敏感并且您不想让开发团队的其他人知道怎么办?在之前的文章《SQL Server如何进行元数据底层加密》中,我详细讲解了SQLServer数据加密中用到的各种SQL语法。在本讲中,我们将通过一个例子来演示对数据库字段进行加密的方法和过程。例如,您是项目负责人,想要为客户开发薪资系统。一般来说,企业的工资是保密的。如果你直接把工资信息以明文的形式放到数据库中,你的开发团队的每个人都可以很容易地知道客户员工的工资。如果客户是大型企业,我不是说你应该非常了解其中的风险。下面以最简单的工资表为例,说明如何对敏感信息进行加密。如果你对加密中使用的SQL语法不是很了解,建议你回头看看我上一篇文章中的相关描述。第一步是创建数据库主密钥CREATEMASTERKEYENCRYPTIONBYPASSWORD='SysKey'GO这里创建数据库主密钥,例如密码是'SysKey'。主密钥只需要创建一次。第二步创建证书CREATECERTIFICATEMYCERTwithSUBJECT='MyCert'GO此处创建证书MYCERT,证书元数据中字段为'MyCert'。证书创建一次,以后需要打开解密。第三步创建对称密钥CREATESYMMETRICKEYMYKEYWITHALGORITHM=AES_256ENCRYPTIONBYCERTIFICATEMYCERT;GO这里根据证书MYCERT创建密钥MYKEY,加密算法为AES_256。有几种加密算法。前三步完成后,我们就可以在资源管理器中看到我们的证书和密钥信息,如下图所示:第四步:加解密有效性测试我们首先通过变量来测试加解密的有效性:OPENSYMMETRICKEYMYKEYDECRYPTIONBYCERTIFICATEMYCERT;declare@keyvarbinary(MAX);set@key=EncryptByKey(key_guid('MYKEY'),'20000.00');select@key;selectconvert(varchar(100),DecryptByKey(@key));在解密之前,首先要打开我们定义的密钥,通过:OPENSYMMETRICKEYNCSKDECRYPTIONBYCERTIFICATENCSC;这句话打开钥匙,如果钥匙没有先打开,返回值为NULL。运行参考结果见下图:第五步,要用到的数据为了描述方便,我们创建一个salary表变量:declare@Salarytable(FNamenvarchar(50),FSalaryvarbinary(MAX));这里需要注意的是,存放加密数据的字段要设置为varbinary类型。第六步是插入加密数据。插入时,需要使用函数EncryptByKey对文本进行加密,密钥可以通过函数key_guid获取。加密的数据类型是varbinary。insertinto@Salary(FName,FSalary)values('张三',EncryptByKey(key_guid('MYKEY'),'20000.00')),('李四',EncryptByKey(key_guid('MYKEY'),'25000.00')),('Wanger',EncryptByKey(key_guid('MYKEY'),'30000.00'));第七步:数据读取读取数据时,需要调用函数DecryptByKey进行解密,将解密后的Varbinary通过Convert转换为varchar类型。选择*,转换(varchar,DecryptByKey(FSalary))来自@Salary;完整处理请参考下图:怎么样,整个过程并不复杂。希望能帮到你!