在Azure中始终加密的SQL

时间:2018-07-31 17:00:54

标签: azure encryption always-encrypted

我需要构建一个访问数据库中某些加密列的Web应用程序。所有必须托管在客户的天蓝色帐户中。我搜索了几天,读了很多教程,但找不到解决我问题的答案。

我主要遵循以下原则:

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-always-encrypted http://www.bradleyschacht.com/always-encrypted-with-azure-key-vault/

我能够使用SSMS加密向导生成的证书和azure上托管的SQL DB在我的计算机上运行Web应用程序。我无法使用天蓝色的金库密钥来做到这一点。

现在,我需要在azure上发布我的Web应用程序,但是我无法访问/修改数据库数据。我需要使用我机器上的证书或使用Azure保管库。谁能向我解释这是怎么做的?

  • 我试图将证书导出到蔚蓝金库,但是我不知道如何“引用”它

  • 我试图在数据库上创建一个新表并使用保管库密钥对其进行加密,但是我得到了:

  

无法解密列加密密钥。无效的密钥存储提供者   名称:“ AZURE_KEY_VAULT”。密钥库提供者名称必须表示   系统密钥库提供者或注册的自定义密钥库提供者。   有效的系统密钥库提供程序名称为:“ MSSQL_CERTIFICATE_STORE”,   “ MSSQL_CNG_STORE”,“ MSSQL_CSP_PROVIDER”。有效(当前注册)   自定义密钥存储提供程序名称为:。请验证密钥存储区   数据库中列主键定义中的提供程序信息,   并确认您的应用程序中使用的所有自定义密钥存储提供程序都是   正确注册。”

  • 我在某处读到我需要在AD中为我的应用程序授予权限,但是我没有客户端(Azure订阅的所有者)的权限。
  • 我还阅读到必须使用存储过程来读写数据库。这是真的吗?

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  

我需要使用我机器上的证书或使用天蓝色   跳马。谁能向我解释这是怎么做的?

这取决于您的用例。实际为您的Column Master键选择Keystore Provider取决于您使用的驱动程序和版本。密钥存储有两个高级类别:Read here

  • 本地
  • 集中式密钥库

本地

如果您打算在本地/ VM中部署应用,则可以生成我们自己的证书,并将该证书保存在本地VM中。

集中式密钥存储区

如果您打算将应用程序部署在Azure Web APP / Cloud中,则应将密钥存储区保存在一个集中的安全保管箱中,该保管箱可能位于Azure Key Vault

最佳做法是,不要将提供程序存储在本地计算机中,如果VM受到破坏,则DB证书也受到破坏。

  

我试图将证书导出到蔚蓝金库,但我不知道   如何“引用”它

enter image description here

CREATE COLUMN MASTER KEY [TESTMASTERKEY]
WITH
(
    KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',
    KEY_PATH = N'' --Paste your Key Identifier 
)
GO
  

我试图在数据库上创建一个新表并使用保管库对其进行加密   键,但是我得到了:

  • 始终尝试下载latest SSMS version
  • 假设您正在使用Azure SQLDB。始终加密仅在SQL Server上有效 内部和所有版本的Azure SQLDB 2016年及更高版本
  • 将连接字符串设置为Column Encryption Setting=enabled

您描述的行为是CTP 3.0和SSMS 10月更新中的错误。您推测的问题是,如果您打开“查询编辑器”窗口,然后首先打开“始终加密”向导,则未注册Azure Key Vault提供程序。我们已经解决了SSMS的下一个更新!同时,解决方法是打开“始终加密”向导(您可以在打开后立即将其关闭/取消),这将导致Azure Key Vault提供程序得到注册。 此错误仅通过这种特定情况(在向导之前使用查询编辑器)表现出来,并且完全不会影响您使用“始终加密”向导或将Azure Key Vault提供程序与任何客户端应用程序一起使用的能力。

因此,请尝试下载最新的SSMS版本。

  

我在某处阅读了我需要在广告中授予我许可的地方   应用程序,但我没有客户(   Azure订阅)。

这主要用于客户端。您需要注册您的应用程序才能为客户端应用程序获取client idclient secret以便与DB中的加密数据进行对话。 Read here for how to register your client app。除非您注册您的应用程序,否则您将无法从任何客户端(SSMS除外)进行连接。您需要联系订阅所有者进行注册。

  

我还读到必须使用存储过程来读取和写入   数据库。这是真的吗?

取决于您的加密类型。加密Read here about it

有两种
  • 确定性
  • 随机化

每个都有自己的优点和缺点。

确定性加密始终为任何给定的明文值生成相同的加密值。使用确定性加密可以在加密列上进行查找,相等联接,分组和索引。。但是,也可以允许未经授权的用户通过检查加密列中的模式来猜测有关加密值的信息。一小部分可能的加密值,例如True / False或North / South / East / West地区。确定性加密必须对字符列使用具有binary2排序顺序的列排序规则。

随机加密使用一种以不太可预测的方式加密数据的方法。随机加密更安全,但会阻止在加密列上进行搜索,分组,索引和联接。