SQL Server:提供数据库备份时动态数据屏蔽是否安全?

car*_*reo 8 sql-server backup sql-server-2016 dynamic-data-masking

我有一个 SQL Server 2016 SP1,其中包含我准备与合作伙伴(开发人员)共享的数据,但有几列除外,例如:

email varchar(64) MASKED WITH (FUNCTION = 'email()') NULL
Run Code Online (Sandbox Code Playgroud)

我向合作伙伴提供了以特定用户身份登录数据库测试副本的凭据,而无需取消屏蔽权限。我知道这是相当安全的。现在,我们正在考虑与我们的合作伙伴共享数据库备份,以便他们可以在自己的服务器和环境中重新加载。

我可能需要包含用户,以便合作伙伴无法创建新用户或将他们连接到现有登录名(对此不确定)。

CREATE USER user_name WITH PASSWORD = 'strong_password';
Run Code Online (Sandbox Code Playgroud)

有没有办法可以共享数据库备份,并且仍然相信被屏蔽的列是安全的,或者我是否必须物理删除数据?

Tib*_*szi 13

不,我很抱歉。您的合作伙伴拥有其 SQL Server 的系统管理员登录名,系统管理员可以对 SQL Server 实例中的所有内容执行所有操作 - 包括数据库。

我建议你制定一个程序来清除敏感数据。即,执行备份。将其恢复为不同的数据库名称,清理它。现在生成一个新的备份。


Sea*_*ser 11

我可能需要包含用户,以便合作伙伴无法创建新用户或将他们连接到现有登录名(对此不确定)。

无论您是否共享备份,无论是否包含数据库,他们都可以对数据做任何他们想做的事情。系统管理员(我确信他们可以在他们的服务器上访问)可以看到所有数据。

有没有办法可以共享数据库备份,并且仍然相信被屏蔽的列是安全的,或者我是否必须物理删除数据?

删除数据,然后在事务日志中多次循环,通过插入虚拟数据(这样他们不能挖掘日志)或更好的方式进行备份和重用 VLF,或者更好的是,创建数据库的仅模式副本并仅插入需要的数据。请注意,您仍然可以从统计数据中挖掘信息,如果我正在制作要发送的副本并希望它是安全的,我不会编写这些信息。

另一种选择是将备份恢复到暂存区并使用某种加密形式(列、AE 等)对敏感列中的数据进行加密。在发送数据库之前删除必要的密钥。这样他们就没有解密数据的密钥,但它仍然存在。如果您不想执行上述任何其他选项,这可能是可以接受的。