Semana 22 – Básico

El jefe de ventas de Frosty Sales no tiene amigos. Por lo tanto, en lugar de dar a cada representante de ventas una lista de ciudades, ha decidido ordenarlas de forma que las ciudades-distrito con un id impar pertenezcan a rep1, y las pares a rep2.

Tu trabajo es crear una vista segura que:

  1. Garantice que rep1 sólo pueda ver las ciudades-distrito con un id impar.
  2. Garantice que rep2 sólo pueda ver las ciudades-distrito con id par.

Los campos 'id' son en realidad un id generado aleatoriamente (para que podamos cumplir con las mejores prácticas de vista segura)

-- 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 warehousegrant 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;

Resultados

Cuando rep1 consulta, debería ver esto:

A screenshot of a computerDescription automatically generated

Cuando rep2 consulta, deberían ver esto:

A screenshot of a phoneDescription automatically generated

Recuerda que si deseas participar:

  1. Regístrate como miembro de Frosty Friday. Puedes hacerlo haciendo clic en la barra lateral y luego yendo a "REGISTRARSE" (ten en cuenta que unirte a nuestra lista de correo no te proporcionará una cuenta de Frosty Friday).
  2. Publica tu código en GitHub y asegúrate de que sea de acceso público (consulta nuestra guía si no sabes cómo hacerlo).
  3. Publica la URL en los comentarios del desafío.

Si tienes alguna pregunta técnica que te gustaría plantear a la comunidad, puedes hacerlo aquí, en nuestro hilo dedicado a estos retos.

Previous
Previous

Semana 21 - SQL y Técnicas de Consulta

Next
Next

Semana 19 - SQL y Técnicas de Consulta