【发布时间】:2020-12-10 14:56:40
【问题描述】:
首先,作为 SQL Server 的管理员,我正在尝试使用标准数据库来屏蔽列。
CREATE TABLE [Person].[MyEmailAddress]
(
[MyBusinessEntityID] [int] NOT NULL,
[MyEmailAddressID] [int] IDENTITY(1,1) NOT NULL,
[EmailAddress] [nvarchar](50) MASKED WITH (FUNCTION = 'email()') NULL, --<== masked
[rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[ModifiedDate] [datetime] NOT NULL,
CONSTRAINT [PK_MyEmailAddress_BusinessEntityID_EmailAddressID] PRIMARY KEY CLUSTERED (
[MyBusinessEntityID] ASC,
[MyEmailAddressID] ASC
)
) ON [PRIMARY]
GO
然后,我创建了一个新的存储过程
CREATE PROCEDURE [Person].[Email_Address]
AS
BEGIN
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT * from [Person].[EmailAddress]
END
GO
然后,我创建了一个新的登录用户
create login AdvUserTest004
with password = 'Test123'
create user User004
for login AdvUserTest004
-- add user to the database owner role
exec sp_addrolemember N'db_owner', N'User004'
通过将此link 引用到db_datawriter 和db_datareader 来设置用户角色。没有这两个成员资格,表格就不会出现。
然后,我尝试使用 SQL Server 身份验证模式使用“AdvUserTest004”登录。尝试执行select语句
select * from [Person].[EmailAddress]
输出结果看起来不错,被屏蔽了。
但是上面的存储过程没有出现。所以,通过引用这个document,授予执行权限。
现在,存储过程照常出现。然后,执行存储过程
exec [Person].[Email_Address]
结果如下:
所以问题是,
- 为什么电子邮件列在存储过程中执行时未屏蔽,但在 select 语句中被屏蔽?
- 在存储过程中执行时,email列应该如何掩码?
【问题讨论】:
标签: sql sql-server permissions data-masking