//// DYNAMIC DATA MASKING ///////
USE ROLE ACCOUNTADMIN;
CREATE OR REPLACE DATABASE DEMO_DB;
-- Prepare table --
create or replace table customers(
id number,
full_name varchar,
email varchar,
phone varchar,
spent number,
create_date DATE DEFAULT CURRENT_DATE);
-- insert values in table --
insert into customers (id, full_name, email,phone,spent)
values
(1,'Lewiss MacDwyer','lmacdwyer0@[Link]','262-665-9168',140),
(2,'Ty Pettingall','tpettingall1@[Link]','734-987-7120',254),
(3,'Marlee Spadazzi','mspadazzi2@[Link]','867-946-3659',120),
(4,'Heywood Tearney','htearney3@[Link]','563-853-8192',1230),
(5,'Odilia Seti','oseti4@[Link]','730-451-8637',143),
(6,'Meggie Washtell','mwashtell5@[Link]','568-896-6138',600);
-- set up roles
CREATE OR REPLACE ROLE ANALYST_MASKED;
CREATE OR REPLACE ROLE ANALYST_FULL;
-- grant usage on database and schema
GRANT USAGE ON DATABASE DEMO_DB TO ROLE ANALYST_MASKED;
GRANT USAGE ON DATABASE DEMO_DB TO ROLE ANALYST_FULL;
-- grant usage on schema
GRANT USAGE ON SCHEMA DEMO_DB.PUBLIC TO ROLE ANALYST_MASKED;
GRANT USAGE ON SCHEMA DEMO_DB.PUBLIC TO ROLE ANALYST_FULL;
-- grant select on table
GRANT SELECT ON TABLE DEMO_DB.[Link] TO ROLE ANALYST_MASKED;
GRANT SELECT ON TABLE DEMO_DB.[Link] TO ROLE ANALYST_FULL;
-- grant warehouse access to roles
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE ANALYST_MASKED;
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE ANALYST_FULL;
-- assign roles to a user
GRANT ROLE ANALYST_MASKED TO USER NIKOLAI;
GRANT ROLE ANALYST_FULL TO USER NIKOLAI;
-- Set up masking policy
create or replace masking policy demo_db.[Link]
as (val varchar) returns varchar ->
case
when current_role() in ('ANALYST_FULL', 'ACCOUNTADMIN') then val
else '##-###-##'
end;
-- Apply policy on a specific column
ALTER TABLE IF EXISTS demo_db.[Link] MODIFY COLUMN phone
SET MASKING POLICY demo_db.[Link];
-- Validating policies
USE ROLE ANALYST_FULL;
SELECT * FROM CUSTOMERS;
USE ROLE ANALYST_MASKED;
SELECT * FROM CUSTOMERS;
alter masking policy phone
set body ->
case
when current_role() in ('ANALYST_FULL', 'ACCOUNTADMIN') then val
else concat(LEFT(val,1),'##-###-##')
end;