我的名字叫Hari varma,我正在担任SQL DBA。
当前,我在测试服务器的SQL Server 2017 Development Edition
中遇到始终加密问题。
我对“始终加密”和TDE没有任何经验。我的一位客户要求我对数据库进行加密。
我已经对Always Encryption进行了一些测试,并且可以通过执行以下操作来加密和解密列数据:
On the SQL Server instance -->Options-->Additional connection Parameter-->Column Encryption Setting = Enabled
启用列加密后,我可以查看表中的加密数据。
但是,我无法在此加密列中插入,更新和删除数据。 另外,我还需要对允许/不允许查看此加密列上的数据的用户设置权限。
我需要授予特定用户哪些权限,并提供始终加密和TDE的所有先决条件。
答案 0 :(得分:0)
首先,重要的是要了解,在使用Always Encrypted时,您的SQL Server实例不知道用于加密和解密数据的密钥。密钥通常在外部存储,通常存储在Windows证书存储或Azure Key Vault之类的密钥存储中。这意味着SQL Server本身无法加密或解密数据-而是必须由有权访问密钥的客户端应用程序完成。
但是我无法在此加密列中插入,更新和删除数据。
我假设您正在尝试直接通过SSMS或类似方法插入,更新和删除数据。这仅在有限的程度上是可能的。这是因为SSMS(在这种情况下,这是您的客户端应用程序)需要能够对数据进行加密,然后再将其发送到SQL Server。
在此处(使用SSMS)详细了解SQL Server中的inserting data into columns that are encrypted via Always Encrypted。
有关如何通过SSMS插入加密数据的简短摘要:
完成上述两个步骤后,就可以将数据插入加密列中,如下所示:
DECLARE @ParameterToBeEncrypted NVARCHAR(100) = 'Decrypt me';
INSERT INTO dbo.MyTable(MyEncryptedColumn) VALUES (@ParameterToBeEncrypted);
之所以行之有效,是因为您的客户端应用程序(SSMS)能够在将初始化@ParameterToBeEncrypted
的值发送到SQL Server之前对其进行加密。仅当您当前的用户有权访问列加密密钥时,此方法才有效。 SQL Server将永远不会看到纯/未加密的值(“解密我”)-它只会看到应该插入加密列中的加密值。
我需要授予特定用户哪些权限,并提供“始终加密”的所有先决条件
这是SQL Server中权限的组合,并且能够访问用于加密和解密数据的密钥。必要的数据库权限为VIEW ANY COLUMN MASTER KEY DEFINITION
和VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
。
您可以read more about the necessary permissions here.
如果要加密数据库中的一组现有数据,那么最好的选择是编写自己的客户端应用程序(例如,使用C#或类似程序)或创建SSIS包(用作客户端应用程序)。客户端应用程序或SSIS包应从数据库读取数据,对数据库外部的数据进行加密,然后将其作为加密数据发送回数据库。