限制 sql 来自 Azure Web 应用的 Azure 访问
Limit sql azure access from an azure web app
从 Azure Web 应用访问时如何限制 Azure SQL 数据库的权限?
详细信息 - 我正在使用 Azure SQL 数据库并创建一个 ASP.NET 核心网络应用程序。在 Web 应用程序中,我放置了一个指向 Azure SQL 数据库的连接字符串。连接字符串包括 Azure SQL 服务器的服务器管理员用户名和密码。 Web 应用成功与数据库通信并可以读写数据。现在,作为安全预防措施,我想防止 Web 应用程序删除数据库 table(无论这是由于代码错误还是在 Web 上执行的恶意 SQL 注入应用程序)。我如何设置 Azure SQL 数据库的权限以禁止从 Web 应用程序中删除 table?
我听说过 Azure Active Directory;我从未使用过它,但我认为这是一种管理数据库用户身份和权限的方法。是否有类似的东西来管理网络应用程序而不是用户的权限。或者是否可以将网络应用程序视为用户并将用户 permissions/roles 分配给它?如果是这样,实施此方法的正确方法是什么?
(此外,当我们讨论这个主题时,除了防止 table 删除之外,您是否建议从安全角度作为最佳实践来防止其他一些 CRUD 操作?)
正如 Dbro 所说,我们建议您创建一个新的登录名和用户,以在从 Azure Web 应用程序访问时限制 Azure SQL 数据库的权限。
用新的 Non-administrator 用户名和密码替换应用程序连接字符串。
而我们都知道,无论我们通过何种方式访问或连接到Azure SQL数据库,都必须通过SQL帐户、服务器管理员或新的Non-administrator。
不同的 Azure SQL 帐户对数据库操作 CURD 具有不同的权限。
更多详情,请参考Azure文档Controlling and granting database access to SQL Database and SQL Data Warehouse。
当您创建一个新用户时,您可以决定授予该用户哪些数据库权限。请参阅:GRANT Database Permissions (Transact-SQL)
出于安全考虑,Azure 还为您提供了 Azure Key Vault。要查看:Always Encrypted: Protect sensitive data and store encryption keys in Azure Key Vault:
总结:
Always Encrypted 是 Azure SQL 数据库和 SQL 服务器中的一项新数据加密技术,有助于保护服务器上静态的敏感数据、客户端和服务器之间的移动期间以及数据传输时的敏感数据正在使用中。 Always Encrypted 确保敏感数据绝不会在数据库系统中以明文形式出现。配置数据加密后,只有有权访问密钥的客户端应用程序或应用程序服务器才能访问明文数据。
希望对您有所帮助。
Is there something similar to manage the permission of a web app rather than a user.
是的。它称为托管身份。 Azure 将在您的 Azure Active Directory 中提供一个身份,并确保只有您应用程序中的代码 运行ning 才能为该身份生成令牌。这使您能够验证并连接到 SQL 服务器(和其他 Azure 资源),而无需在您的代码或配置中使用 username/password 或客户端密码。
见:
Azure AD managed identities for Azure resources
Managed identities for Azure resources provides Azure services with an
automatically managed identity in Azure Active Directory (Azure AD).
You can use this identity to authenticate to any service that supports
Azure AD authentication without having any credentials in your code.
Learn how to create and manage managed identities for Azure resources
with our quickstarts and tutorials.
并且:Tutorial: Secure Azure SQL Database connection from App Service using a managed identity
are there some other CRUD operations that you would recommend preventing from a security perspective as a best practice
您应该创建一个数据库角色,该角色具有 运行 应用程序所需的最低权限,并将您的应用程序用户添加到该角色。当然,所需的权限取决于您的应用程序的用途,但角色可能如下所示:
create role ApplicationUser
grant select,insert,update,delete,execute on schema::dbo to ApplicationUser
deny delete on AuditLog to ApplicationUser
(在 SQL 服务器中,DENY 会覆盖任何 GRANT,因此您可以在 schema-level 授予权限,并有选择地在对象级别拒绝权限)
从 Azure Web 应用访问时如何限制 Azure SQL 数据库的权限?
详细信息 - 我正在使用 Azure SQL 数据库并创建一个 ASP.NET 核心网络应用程序。在 Web 应用程序中,我放置了一个指向 Azure SQL 数据库的连接字符串。连接字符串包括 Azure SQL 服务器的服务器管理员用户名和密码。 Web 应用成功与数据库通信并可以读写数据。现在,作为安全预防措施,我想防止 Web 应用程序删除数据库 table(无论这是由于代码错误还是在 Web 上执行的恶意 SQL 注入应用程序)。我如何设置 Azure SQL 数据库的权限以禁止从 Web 应用程序中删除 table?
我听说过 Azure Active Directory;我从未使用过它,但我认为这是一种管理数据库用户身份和权限的方法。是否有类似的东西来管理网络应用程序而不是用户的权限。或者是否可以将网络应用程序视为用户并将用户 permissions/roles 分配给它?如果是这样,实施此方法的正确方法是什么?
(此外,当我们讨论这个主题时,除了防止 table 删除之外,您是否建议从安全角度作为最佳实践来防止其他一些 CRUD 操作?)
正如 Dbro 所说,我们建议您创建一个新的登录名和用户,以在从 Azure Web 应用程序访问时限制 Azure SQL 数据库的权限。
用新的 Non-administrator 用户名和密码替换应用程序连接字符串。
而我们都知道,无论我们通过何种方式访问或连接到Azure SQL数据库,都必须通过SQL帐户、服务器管理员或新的Non-administrator。
不同的 Azure SQL 帐户对数据库操作 CURD 具有不同的权限。
更多详情,请参考Azure文档Controlling and granting database access to SQL Database and SQL Data Warehouse。
当您创建一个新用户时,您可以决定授予该用户哪些数据库权限。请参阅:GRANT Database Permissions (Transact-SQL)
出于安全考虑,Azure 还为您提供了 Azure Key Vault。要查看:Always Encrypted: Protect sensitive data and store encryption keys in Azure Key Vault:
总结:
Always Encrypted 是 Azure SQL 数据库和 SQL 服务器中的一项新数据加密技术,有助于保护服务器上静态的敏感数据、客户端和服务器之间的移动期间以及数据传输时的敏感数据正在使用中。 Always Encrypted 确保敏感数据绝不会在数据库系统中以明文形式出现。配置数据加密后,只有有权访问密钥的客户端应用程序或应用程序服务器才能访问明文数据。
希望对您有所帮助。
Is there something similar to manage the permission of a web app rather than a user.
是的。它称为托管身份。 Azure 将在您的 Azure Active Directory 中提供一个身份,并确保只有您应用程序中的代码 运行ning 才能为该身份生成令牌。这使您能够验证并连接到 SQL 服务器(和其他 Azure 资源),而无需在您的代码或配置中使用 username/password 或客户端密码。
见: Azure AD managed identities for Azure resources
Managed identities for Azure resources provides Azure services with an automatically managed identity in Azure Active Directory (Azure AD). You can use this identity to authenticate to any service that supports Azure AD authentication without having any credentials in your code. Learn how to create and manage managed identities for Azure resources with our quickstarts and tutorials.
并且:Tutorial: Secure Azure SQL Database connection from App Service using a managed identity
are there some other CRUD operations that you would recommend preventing from a security perspective as a best practice
您应该创建一个数据库角色,该角色具有 运行 应用程序所需的最低权限,并将您的应用程序用户添加到该角色。当然,所需的权限取决于您的应用程序的用途,但角色可能如下所示:
create role ApplicationUser
grant select,insert,update,delete,execute on schema::dbo to ApplicationUser
deny delete on AuditLog to ApplicationUser
(在 SQL 服务器中,DENY 会覆盖任何 GRANT,因此您可以在 schema-level 授予权限,并有选择地在对象级别拒绝权限)