Semaine 22 - Sécurité et Gouvernance

Le directeur des ventes chez Frosty Sales n'a pas d'amis. Par conséquent, au lieu de donner à chaque représentant commercial une liste de villes, il a décidé de les trier de telle sorte que les quartiers de villes avec un identifiant impair appartiennent au représentant 1, et ceux avec un identifiant pair au représentant 2.

Votre tâche consiste à créer une vue sécurisée qui permettra :

  1. De garantir que le représentant 1 ne peut voir que les quartiers de villes avec un identifiant impair.
  2. De garantir que le représentant 2 ne peut voir que les quartiers de villes avec un identifiant pair.
  3. Le champ 'id' est un identifiant généré de manière aléatoire (afin de respecter les meilleures pratiques pour les vues sécurisées).

-- File format to read the CSVcreate or replace file format frosty_csvtype = csvfield_delimiter = ','field_optionally_enclosed_by = '"'skip_header = 1;-- Creates stage to read the CSVcreate or replace stage w22_frosty_stageurl = 's3://frostyfridaychallenges/challenge_22/'file_format = frosty_csv;-- Roles needed for challengecreate role rep1;create role rep2;-- Grant roles to self for testinggrant role rep1 to user <INSERT_YOUR_USERNAME>;grant role rep2 to user <INSERT_YOUR_USERNAME>;-- Enable warehouse usage. Assumes that `public` has access to the warehousegrant role public to role rep1;grant role public to role rep2;-- Create the table from the CSV in S3create table <YOUR_DB_NAME>.<YOUR_SCHEMA_NAME>.week22 asselect t.$1::int id, t.$2::varchar(50) city, t.$3::int district from @w22_frosty_stage (pattern=>'.*sales_areas.*') t;-- Code for creating the secure view<ENTER_CODE_HERE>-- Roles need DB accessgrant usage on database <YOUR_DB_NAME> to role rep1;grant usage on database <YOUR_DB_NAME> to role rep2;-- And schema accessgrant usage on schema <YOUR_DB_NAME>.challenges to role rep1;grant usage on schema <YOUR_DB_NAME>.challenges to role rep2;-- And usage of viewgrant select on view <YOUR_DB_NAME>.<YOUR_SCHEMA_NAME>.secure_cities to role rep1;grant select on view <YOUR_DB_NAME>.<YOUR_SCHEMA_NAME>.secure_cities to role rep2;-- Get the result of queriesuse role rep1select * from <YOUR_DB_NAME>.<YOUR_SCHEMA_NAME>.secure_cities;use role rep2select * from <YOUR_DB_NAME>.<YOUR_SCHEMA_NAME>.secure_cities;

RÉSULTATS

Lorsque le représentant 1 effectue une requête, il devrait voir ceci :

Lorsque le représentant 2 effectue une requête, il devrait voir ceci :

Et n'oubliez pas, si vous souhaitez participer aux défis:

  1. Inscrivez-vous en tant que membre de Frosty Friday. --> Vous pouvez le faire en cliquant sur la barre latérale, puis en cliquant sur 'REGISTER' (notez que s'inscrire à notre liste de diffusion ne vous donne pas de compte Frosty Friday).
  2. Publiez votre code sur GitHub et rendez-le accessible au public (consultez notre guide si vous ne savez pas comment faire, disponible ici) .
  3. Postez l'URL dans les commentaires du défi. Si vous avez des questions techniques que vous souhaitez poser à la communauté, vous pouvez les poser ici, sur notre thread dédié.

Previous
Previous

Semaine 23 - débutant

Next
Next

Semaine 22 - débutant