【问题标题】:Exclusive client application to Always Encrypted databaseAlways Encrypted 数据库的专有客户端应用程序
【发布时间】:2023-04-05 17:35:02
【问题描述】:

SQL Server 2016,始终加密,使用证书加密。为了让客户端应用程序接收解密的数据,在 PC 上安装一个证书和带有ColumnEncryption = Enabled; 的连接字符串就足够了。

但这意味着在那台 PC 上的任何应用程序都可以访问数据库 - 只需知道连接字符串。如何确保在安装了证书的 PC 上 - 只有一个/某些应用程序访问数据库及其解密数据?

【问题讨论】:

  • 为什么要以每个人都可以访问的方式存储连接字符串?
  • 每个拥有自己sql登录的用户都可以将连接参数填写到excel或其他应用程序等应用程序 - 这是GDPR安全事件,可能会被处以高额罚款。此问题与 GDPR 法规及其在 SQL Server 2016 中的支持有关。
  • 每个拥有自己 sql 登录名的用户都不应访问数据库。如果您将访问权限授予所有人,那是您的问题,而不是加密问题。当然,如果有人拥有映射到此数据库的有效登录名,则可以绕过您的应用程序访问它
  • sepupic - 我没有说每个人都可以访问。 sepupic - 请不要再回答这个问题 - 我不需要无能和无用的答案。我们需要解决 GDPR 监管的严重问题。

标签: sql-server encryption always-encrypted


【解决方案1】:

有一种方法,连接字符串中的应用程序名称.restricting-access-to-database-by-application-name-andor-host-name-in-sql-server

CREATE TRIGGER RestrictAccessPerApplication
ON ALL SERVER
FOR LOGON
AS
BEGIN
      IF
      (PROGRAM_NAME() = 'Microsoft® Access' AND HOST_NAME() = 'WORKSTATION_01')
      BEGIN
            ROLLBACK;
      END
END

但我不认为这对这类敏感应用程序有好处。

【讨论】:

  • 您在触发器中看到的主机名和应用程序名称正是应用程序在其连接字符串中传递的内容。我可以通过 SSMS 轻松传递与真实主机和真实应用程序名称无关的任何主机/应用程序名称
  • @sepupic 你是对的,那为什么已经在回答中提到了。但是,如果我们在代码中创建连接字符串并发送一些特定的 GUID 作为 ApplicationName 。然后检查触发器中的GUID,我们可以实现一些安全性。但这一切都取决于应用程序以及它是否计划部署(内部组织或公共)。
  • 谢谢,我会以这种方式进行测试 - 我希望它至少部分会有所帮助。但我希望,用于 GDPR 法规的 Server 2016 功能有可能限制应用程序,因为它是 GDPR 的精髓——保护敏感数据。这样的解决方案应该允许一些数据库设置,它只接受ColumnEncryption = Enabled 用于特定应用程序。
  • 触发器可以被管理员删除。我认为 Sql Server 2016“始终加密”无法使用,因为它无法保护具有有效 sql 登录的用户的数据 - 从其他应用程序访问数据库。但我不敢相信。
  • 实际上这种方法可以工作,只要应用程序名称是每日计算的秘密。触发器可以使用 CLR(混淆)来计算正确的每日秘密。您的应用程序也应该这样做,并在连接字符串中设置应用程序名称。
猜你喜欢
  • 2018-07-13
  • 1970-01-01
  • 2020-04-24
  • 2019-06-22
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2014-10-25
相关资源
最近更新 更多