我有一个 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)
有没有办法可以共享数据库备份,并且仍然相信被屏蔽的列是安全的,或者我是否必须物理删除数据?
我正在尝试在引用带有屏蔽列的表(SQL Server 2016)的视图上创建索引。屏蔽列不是该表中唯一的列,并且未在视图中使用。
create unique clustered index [IX_Name]
on dbo.vw_ViewName(SomeUniqueId)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
无法创建视图“dbo.vw_ViewName”上的索引,因为该视图正在引用带有屏蔽列的表“dbo.TableName”。
在另一个未启用屏蔽的环境中,索引创建成功。
我浏览了大约四页的 Google 结果,但没有找到任何合理的错误描述。我很感激任何关于错误的知识转移以及为什么不可能创建这样的索引。
这是一些重现问题的 SQL:
drop view if exists dbo.vw_Aggregate
drop table if exists dbo.MainTable, dbo.SecondaryTable
go
create table dbo.MainTable
(
MainTableId uniqueidentifier primary key,
SomeExternalId uniqueidentifier,
SecondaryTableId uniqueidentifier
)
go
create table dbo.SecondaryTable
(
SecondaryTableId uniqueidentifier primary key,
CreatedOn datetime,
Amount decimal(19, 8),
-- the below column produces error,
-- if commented out - there is no error
[Description] nvarchar(max) masked with (function = 'default()'),
Dummy …
Run Code Online (Sandbox Code Playgroud) sql-server materialized-view sql-server-2016 data-masking dynamic-data-masking