【问题标题】:Securing SQL Azure db that is directly called by multiple desktop applications保护由多个桌面应用程序直接调用的 SQL Azure db
【发布时间】:2021-07-13 18:53:39
【问题描述】:

我继承了 Azure 中托管的 SQL Server 数据库的支持。

在访问此数据库的个人用户桌面上安装了 5 - 10 个 WPF 应用程序。

由于住宅宽带,用户都拥有带有动态 IP 的个人 PC(即不是由组织集中管理的)。

应用程序通过 ADO 连接直接连接到数据库。

应用程序的所有实例都使用一个用户名和强密码(大约 40 个字符)。

未加密的凭据仅存储在密码保险箱中,而不是 GitHub 或其他任何地方等。

连接字符串经过高度加密,存储在 app.config 中,并在运行时在应用程序的工作内存中解码。

数据库启用了 TLS 安全性(即静态加密)。 PII 数据以及银行帐户详细信息存储在数据库中(注意,财务详细信息存储在额外加密的列中)

已通过将所有 IP 地址列入白名单来授予数据库访问权限:

从安全角度来看,这种设置是否可以接受? 如果没有,需要改变什么或可以做些什么来改进它?

这个问题与我发现的另外两个帖子相似,Is Azure SQL secure when using it for a desktop program?How can I allow unknown users to access my SQL (Azure) DB?

我相信我的问题与这些问题足够不同,因为那里的答案基本上分为两个阵营 1)。 “将所有 IP 列入白名单”和 2)。 '引入中间层'。

虽然我在构建 WebAPI 服务方面经验丰富,但我不认为在数据库前面引入使用 HTTPS 的中间 Web 服务层必然会使其更安全(如果我错了,请告诉我)。

理想情况下,为了简单起见,我希望保留当前架构,但让我自己满意的是,从安全角度来看,该设置是可以接受的。

【问题讨论】:

  • 您可以使用 ip 白名单,但根据您的观点,它是动态 ips,因此最好启用 MFA/服务主体/托管身份安全性以进行身份​​验证和以编程方式访问。
  • @RahulShukla - 您是说以某种方式将各个 Windows 用户凭据传递给数据库,并在数据库中单独授予这些访问权限,而不是当前的单一应用程序用户名和密码方法??
  • Azure sql server 提供 MFA 和服务主体身份验证选项,您可以在 docs.microsoft.com/en-us/azure/azure-sql/database/… 中看到该选项。

标签: sql-server azure security encryption database-connection


【解决方案1】:

问题在于您的 Azure SQL 数据库有一个公共终结点 .database.windows.net。因此,通过允许任何 IP 访问数据库,您将删除防火墙规则安全层,并且您的数据库会受到恶意攻击。这不被视为安全最佳实践。这就是为什么总是提出这种“中间层”解决方案来解决动态 IP 的问题。

您可以在此处找到更多信息和可能的解决方案(私有端点、VPN S2S):https://docs.microsoft.com/en-us/azure/azure-sql/database/security-best-practice#minimize-attack-surface

【讨论】:

  • 嗨@Jesús,感谢您的评论。我仍然无法理解的是,即使我在两者中间放了一个 webapi,将数据库防火墙锁定到 web 服务主机的 IP 地址,这不是 web 服务面临的事实吗?有效地将每个 IP 地址列入白名单的互联网仍然是相同的攻击面???如果可以的话,请帮助我理解这一点。
  • 不是中间层解决方案方面的专家,但我想您也应该为这一层提供额外的安全性,并提供一种仅接受来自用户桌面的请求的方法。另一种解决方案可能是将您的数据库隔离在虚拟网络中,并在桌面上使用点对站点 VPN(我假设用户在您的公司工作,他们不是客户)。
  • 谢谢@Jesús,如果不引入中间层,我认为 VPN 解决方案是最好的方法。这样可以确保点对点通信的安全,并删除所有 IP 的白名单,而不是 VPN 上的 IP。
猜你喜欢
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2015-08-12
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多