0

从 Azure Web 应用访问时,如何限制 Azure SQL 数据库的权限?

详细信息 - 我正在使用 Azure SQL 数据库并创建 ASP.NET Core Web 应用程序。在 Web 应用程序中,我放置了一个指向 Azure SQL 数据库的连接字符串。连接字符串包括 Azure SQL 服务器的服务器管理员用户名和密码。Web 应用程序与数据库成功通信并且可以读取和写入数据。现在,作为安全预防措施,我想阻止 Web 应用程序删除数据库表(无论是由于代码中的错误,还是在 Web 应用程序上执行了恶意 SQL 注入)。如何在 Azure SQL 数据库上设置权限以禁止从 Web 应用程序删除表?

我听说过 Azure Active Directory;我从未使用过它,但我认为它是一种管理数据库用户身份和权限的方法。是否有类似管理网络应用程序而不是用户的权限的东西。或者是否可以将 Web 应用程序视为用户并为其分配用户权限/角色?如果是这样,实现这一点的正确方法是什么?

(另外,当我们讨论这个主题时,除了防止表删除之外,还有一些其他的 CRUD 操作您会建议从安全角度作为最佳实践来防止吗?)

4

2 回答 2

1

正如 Dbro 所说,我们建议您创建一个新的登录名和用户,以在从 Azure Web 应用程序访问时限制 Azure SQL 数据库的权限。

将应用程序连接字符串替换为新的非管理员用户名和密码。

而且我们都知道,无论我们以何种方式访问​​或连接Azure SQL数据库,都必须通过SQL账号,​​Server管理员或者新建的Non-administrator。

不同的 Azure SQL 帐户对数据库操作 CURD 的权限不同。

有关更多详细信息,请参阅 Azure 文档控制和授予对 SQL 数据库和 SQL 数据仓库的数据库访问权限

当您创建一个新用户时,您可以决定为该用户授予哪些数据库权限。请参阅:授予数据库权限 (Transact-SQL)

为安全起见,Azure 还为您提供了 Azure Key Vault。要查看:始终加密:保护敏感数据并将加密密钥存储在 Azure Key Vault 中

概括:

Always Encrypted 是 Azure SQL 数据库和 SQL Server 中的一项新数据加密技术,可帮助保护服务器上的静态敏感数据、客户端和服务器之间的移动以及数据正在使用中的敏感数据。Always Encrypted 确保敏感数据永远不会在数据库系统中以明文形式出现。配置数据加密后,只有有权访问密钥的客户端应用程序或应用服务器才能访问明文数据。

希望这可以帮助。

于 2019-07-09T03:27:00.200 回答
0

是否有类似管理网络应用程序而不是用户的权限的东西。

是的。它被称为托管身份。Azure 将在你的 Azure Active Directory 中预配一个身份,并确保只有在你的应用程序中运行的代码才能为该身份生成令牌。这使您能够验证并连接到 SQL Server(和其他 Azure 资源),而无需在代码或配置中使用用户名/密码或客户端密码。

请参阅: Azure 资源的 Azure AD 托管标识

Azure 资源的托管标识为 Azure 服务提供 Azure Active Directory (Azure AD) 中的自动托管标识。你可以使用此标识向任何支持 Azure AD 身份验证的服务进行身份验证,而无需在代码中使用任何凭据。通过我们的快速入门和教程了解如何为 Azure 资源创建和管理托管标识。

并且:教程:使用托管标识从应用服务保护 Azure SQL 数据库连接

是否有其他一些 CRUD 操作,您会建议从安全角度将其作为最佳实践加以阻止

您应该创建一个具有运行应用程序所需的最低权限的数据库角色,并将您的应用程序用户添加到该角色。当然,所需的权限取决于您的应用程序的功能,但角色可能如下所示:

create role ApplicationUser

grant select,insert,update,delete,execute on schema::dbo to ApplicationUser

deny delete on AuditLog to ApplicationUser

(在 SQL Server 中,DENY 会覆盖任何 GRANT,因此您可以在架构级别授予权限,并有选择地在对象级别授予 DENY 权限)

于 2019-07-10T13:34:55.037 回答