我需要构建一个 Web 应用程序来访问数据库上的一些加密列。所有内容都必须托管在客户的 Azure 帐户中。我搜索了几天并阅读了很多教程,但找不到我的问题的答案。
我主要遵循了这些:
https://learn.microsoft.com/en-us/azure/sql-database/sql-database-always-encrypted http://www.bradleyschacht.com/always-encrypted-with-azure-key-vault/
我能够使用 SSMS 加密向导生成的证书和 Azure 上托管的 SQL 数据库在我的计算机上运行 Web 应用程序。我无法使用 azure 的保管库 key 来完成此操作。
现在我需要在 azure 上发布我的 Web 应用程序,但我无法访问/修改数据库数据。我需要使用我的计算机中的证书或使用 azure 保管库。谁能向我解释一下它是如何完成的?
我尝试将证书导出到 Azure 保管库,但我不知道如何“引用”它
我尝试在数据库上创建一个新表并使用保管库 key 对其进行加密,但我得到:
Failed to decrypt a column encryption key. Invalid key store provider name: 'AZURE_KEY_VAULT'. A key store provider name must denote either a system key store provider or a registered custom key store provider. Valid system key store provider names are: 'MSSQL_CERTIFICATE_STORE', 'MSSQL_CNG_STORE', 'MSSQL_CSP_PROVIDER'. Valid (currently registered) custom key store provider names are: . Please verify key store provider information in column master key definitions in the database, and verify all custom key store providers used in your application are registered properly."
- 我在某处读到,我需要在 AD 中向我的应用程序授予权限,但我的客户端(Azure 订阅的所有者)没有授予我这样做的权限。
- 我还了解到必须使用存储过程来读取和写入数据库。这是真的吗?
预先感谢您的帮助。
最佳答案
I need to either use the certificate from my machine or use the azure vault. Can anyone explain to me how it's done?
这取决于您的用例。实际上,为您的列主 key 选择 keystore 提供程序取决于您使用的驱动程序和版本。 key 存储有两个高级类别:Read here
- 本地
- 集中 key 存储
本地
如果您计划在本地/虚拟机中部署应用程序,那么您可以生成我们自己的证书并将证书保留在本地虚拟机中。
集中 key 存储
如果您计划在 azure web APP/云中部署应用程序,那么您应该将 key 存储保存在集中式安全保管库中,此处可能为 Azure Key Vault
作为最佳实践,您不应将提供程序存储在本地计算机中,如果您的虚拟机受到威胁,那么您的数据库证书也会受到威胁,这将是一个问题。
I tried to export the certificate to the azure vault, but I don't know how to "reference" it
CREATE COLUMN MASTER KEY [TESTMASTERKEY]
WITH
(
KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',
KEY_PATH = N'' --Paste your Key Identifier
)
GO
I tried to create a new table on the DB and encrypting it with a vault key, but I get:
- 始终尝试下载latest SSMS version .
- 假设您使用的是 Azure SQLDB。始终加密仅适用于 SQL Server
2016 年及以上版本(本地部署)以及所有版本的 Azure SQLDB
- 将连接字符串设置为
Column Encryption Setting=enabled
您描述的行为是 CTP 3.0 和 SSMS 10 月更新中的错误。正如您猜测的那样,问题在于,如果您首先打开“始终加密”向导来打开“查询编辑器”窗口,则不会注册 Azure Key Vault 提供程序。我们已经在 SSMS 的下一次更新中解决了这个问题!同时,解决方法是打开“始终加密”向导(打开后可以立即关闭/取消),这将导致 Azure Key Vault 提供程序注册。 此错误仅通过这种特定情况(在向导之前使用查询编辑器)显现出来,并且完全不会影响您使用始终加密向导或将 Azure Key Vault 提供程序与任何客户端应用程序一起使用的能力。强>
因此请尝试下载最新的 SSMS 版本。
I read somewhere that I need to give permission in the AD to my application, but I don't have permissions from my client (the owner of the Azure subscription) to do that.
这主要是针对客户端的。您需要注册您的应用程序才能获取 client id
和client secret
让您的客户端应用程序与数据库中的加密数据进行通信。 Read here for how to register your client app 。除非您注册您的应用程序,否则您无法从任何客户端(SSMS 除外)进行连接。您需要联系订阅所有者来注册该应用。
I read also that a stored procedure must be used to read and write to the DB. Is this true?
取决于您的加密类型。有两种类型的加密 Read here about it
- 确定性
- 随机
各有各的优点和缺点。
确定性加密始终为任何给定的明文值生成相同的加密值。使用确定性加密允许对加密列进行点查找、等式连接、分组和索引。但是,也可能允许未经授权的用户通过检查加密列中的模式来猜测有关加密值的信息,尤其是在存在以下情况的情况下:一小组可能的加密值,例如 True/False,或北/南/东/西区域。确定性加密必须对字符列使用具有二元排序顺序的列排序规则。
随机加密使用一种以难以预测的方式加密数据的方法。随机加密更安全,但会阻止对加密列进行搜索、分组、索引和联接。
关于azure - Azure 中的 SQL 始终加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51618582/