当前位置: 代码迷 >> SQL >> 问题二:如何保护数据库对象定义,避免发生过渡暴露敏感信息?
  详细解决方案

问题二:如何保护数据库对象定义,避免发生过渡暴露敏感信息?

热度:208   发布时间:2016-05-05 15:24:59.0
T-SQL问题解决集锦——数据加解密
以下代码已经在SQLServer2008上的示例数据库测试通过

问题一:如何为数据进行加密与解密,避免使用者窃取机密数据?

       对于一些敏感数据,如密码、卡号,一般不能使用正常数值来存储。否则会有安全隐患。以往的加密解密都有前端应用程序来辅助完成。而数据库一般只能加密不能解密。

       从2005开始提供了数据库层面的数据加密与解密。其实现方式主要有以下:

1、 利用CONVERT改变编码方式:

利用该函数把文字或数据转换成VARBINARY。但该方式不具备保护数据的能力,仅避免浏览数据的过程中能直接看到敏感数据的作用。

2、 利用对称密钥:

搭配EncryptByKey进行数据加密。使用DecryptByKey函数进行解密。这种方式比较适合大数据量。因为对称密钥的过程好用资源较少。

3、 利用非对称密钥:

搭配EncryptByAsymKey进行数据加密。使用DecryptByAsymKey函数进行解密。用于更高安全级别的加解密数据。因为耗用资源叫多。

4、 利用凭证的方式:

搭配EncryptByCert进行加密和DecryptByCert函数进行解密。比较类似非对称密钥。

5、 利用密码短语方式:

搭配EncryptBypassPhrase进行加密,使用DecryptByPassPhrase函数来解密。可以使用有意义的短语或其他数据行,当成加密、解密的关键字,比较适合一般的数据加解密。

案例:

1、 Convert方式:


2、对称密钥:


3、非对称密钥:


4、证书加密:


5、短语加密:


问题二:如何保护数据库对象定义,避免发生过渡暴露敏感信息?

       一般的保护措施是在创建对象时使用WITH ENCRYPTION来把对象加密,这样就无法查看定义。但是问题是对于维护来说就成了问题,而且备份还原时这部分对象是会丢失的。

       其中一个解决方法是把定义语句放到对象的【扩展属性】中保存,这样能解决上面的问题。

下面举个例子:





  相关解决方案