保护 SQL 由多个桌面应用程序直接调用的 Azure 数据库

Securing SQL Azure db that is directly called by multiple desktop applications

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

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

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

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

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

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

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

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

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

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

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

我相信我的问题与这些问题完全不同,因为那里的答案基本上分为两个阵营 1)。 'whitelist all IPs' 和 2)。 'introduce a middle tier'.

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

理想情况下,为了简单起见,我希望保留当前的体系结构,但从安全角度来看,设置是可以接受的。

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

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