asp.net - 如何最好地保护 SQL Always Encrypted 的加密密钥
问题描述
这是我的要求:
- 一个数据库,其中至少 1 个表上的至少 1 个列是敏感的,应该加密
- DBA 和使用 SSMS 访问数据库的人员应该无法查看列的明文值
- 将有一个客户端 asp.net 应用程序能够检索和解密数据,以及插入和更新表
因此,如果我在必要的列上启用始终加密,任何正常查询都将检索这些列的密文。美好的。
客户端应用程序将具有Column Encryption Setting=Enabled
连接字符串,因此将具有加密和解密数据的能力。
但是如何阻止某人连接 SSMS 并启用相同的列加密设置?然后他们可以从表中选择并查看明文。
简而言之,我如何应用权限,以便只有特定 AD 组中的人员(不包括 DBA)有权访问加密密钥以解密数据?
是否像确保 .net 应用程序所在的 IIS 不在同一台服务器上一样简单,并且仅在该 IIS 机器上创建列主密钥证书?
解决方案
有两个密钥被创建为列主密钥 (CMK) 和列加密密钥 (CEK)。
列主密钥仅存储在应用程序端,而列加密密钥将存储在 SQL Server 端。
结果是,一旦客户端拥有 CMK,您可以通过更改连接字符串来激活加密,然后驱动程序将查找此 CMK。没有它,数据就无法解密。
推荐阅读
- php - laravel-echo-server 不广播事件
- r - 将元素添加到列表是否会导致复制列表?
- c++ - 为指定的对象设置对每个 C++ 函数的调用
- github - 将文件提交到 github 上的分叉存储库
- reactjs - 如何为 JSON 文件中的每个项目呈现一个反应组件?
- amazon-web-services - AWS CLI 输出格式到 SPLUNK
- laravel - Cors 政策问题 Laravel youtube apache
- 3d - 模拟索桥
- string - 为什么 `(show (list elem)) ++ '\n'` 在 Haskell 中不起作用?
- sql - 将 NVARCHAR 列转换为 DATE 数据类型的问题