Blog Post

Experiment: If I have Dynamic Data Masking enabled will BCP pull the non masked data.

,

Hypothesis: If I have Dynamic Data Masking enabled on a column then when I use something like BCP to pull the data out it should still be masked.

I’m almost completely certain this will be the case but I had someone tell me they thought it would go differently, and since neither of us had actually tried this out it seemed like time for a simple experiment.

Set up Dynamic Data Masking

USE master;
GO
-- Create a test login
CREATE LOGIN [Ken_Test] WITH PASSWORD = 'Ken_Test', CHECK_POLICY = OFF;
GO
-- Use a test database
USE msdb;
GO
-- Create test user
CREATE USER [Ken_Test] FROM LOGIN [Ken_Test];
GO
-- Create test table with a couple of masked columns
CREATE TABLE [dbo].[Employee]   
  (Id INT NOT NULL IDENTITY (1,1),
   SSN varchar(11) MASKED WITH (FUNCTION = 'default()') NOT NULL,   
   Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL); 
GO
-- Load data
INSERT INTO [dbo].[Employee] VALUES 
 ('111-11-1111','ken.fisher@email.com')
,('222-22-2222','sqlstudent144@gmail.com')
,('333-33-3333','bob.smith@email.com');
GO
-- Grant select to the temp user
GRANT SELECT ON [dbo].[Employee] TO [Ken_Test];
-- Test the mask
EXECUTE AS USER = 'Ken_Test';
SELECT Id, SSN, Email FROM [dbo].[Employee];
REVERT;
GO

Ok, so obviously the masking is working. Let’s try out BCP.

BCP Test

bcp msdb.dbo.Employee out c:tempEmployee.csv /S ServerInstance /U Ken_Test /P Ken_Test /c /t,

Success! The output, even using BCP is masked.

Cleanup

USE msdb;
GO
DROP TABLE [dbo].[Employee];
DROP USER [Ken_Test];
DROP LOGIN [Ken_Test];
GO

Original post (opens in new tab)
View comments in original post (opens in new tab)

Rate

★ ★ ★ ★ ★ ★ ★ ★ ★ ★

You rated this post out of 5. Change rating

Share

Share

Rate

★ ★ ★ ★ ★ ★ ★ ★ ★ ★

You rated this post out of 5. Change rating