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 :
- De garantir que le représentant 1 ne peut voir que les quartiers de villes avec un identifiant impair.
- De garantir que le représentant 2 ne peut voir que les quartiers de villes avec un identifiant pair.
- 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).
Code de démarrage
-- File format to read the CSV
create or replace file format frosty_csv
type = csv
field_delimiter = ','
field_optionally_enclosed_by = '"'
skip_header = 1;
-- Creates stage to read the CSV
create or replace stage w22_frosty_stage
url = 's3://frostyfridaychallenges/challenge_22/'
file_format = frosty_csv;
-- Roles needed for challenge
create role rep1;
create role rep2;
-- Grant roles to self for testing
grant 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 warehouse
grant role public to role rep1;
grant role public to role rep2;
-- Create the table from the CSV in S3
create table <YOUR_DB_NAME>.<YOUR_SCHEMA_NAME>.week22 as
select 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 access
grant usage on database <YOUR_DB_NAME> to role rep1;
grant usage on database <YOUR_DB_NAME> to role rep2;
-- And schema access
grant usage on schema <YOUR_DB_NAME>.challenges to role rep1;
grant usage on schema <YOUR_DB_NAME>.challenges to role rep2;
-- And usage of view
grant 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 queries
use role rep1
select * from <YOUR_DB_NAME>.<YOUR_SCHEMA_NAME>.secure_cities;
use role rep2
select * from <YOUR_DB_NAME>.<YOUR_SCHEMA_NAME>.secure_cities;
RÉSULTATS
Lorsque le représentant 1 effectue une requête, il devrait voir ceci :
![](https://frostyfriday.org/wp-content/uploads/2022/11/rep1-1024x262.png)
Lorsque le représentant 2 effectue une requête, il devrait voir ceci :
![](https://frostyfriday.org/wp-content/uploads/2022/11/rep2-1024x260.png)
Et n’oubliez pas, si vous souhaitez participer aux défis:
- 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).
- Publiez votre code sur GitHub et rendez-le accessible au public (consultez notre guide si vous ne savez pas comment faire, disponible ici) .
- 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é.