HISTORIA
¡No son solo los malos los que necesitan guardar sus secretos!
Los superhéroes son nuestra primera línea de defensa contra los malhechores, por lo que realmente necesitamos proteger su información.
Sin embargo, administrar una organización de superhéroes es un gran trabajo, por lo que tenemos muchas personas que tienen acceso a nuestros sistemas y debemos asegurarnos de que la verdadera identidad de nuestros héroes nunca se revele.
No obstante, Recursos Humanos aboga por un toque más personal en nuestro negocio y ha solicitado que parte del personal pueda ver los nombres de pila de los superhéroes para conectarse en un nivel más básico. ¡Los superiores aún deberían poder ver todo!
Con los roles en constante cambio dentro de la organización, realmente nos gustaría algo que sea dinámico y pueda manejar roles que aún no se han creado.
DESAFÍO
Con el uso de etiquetas y máscaras, queremos enmascarar las columnas first_name y last_name de nuestra tabla data_to_be_masked.
Queremos lo siguiente:
- El usuario predeterminado que tiene acceso solo puede ver los datos de hero_name desenmascarados
- El Rol foo1 solo puede ver hero_name y first_name
- El Rol foo2 puede ver el contenido de toda la tabla
- La política de enmascaramiento utilizada NO debe utilizar una función de verificación de roles. (función_actual = … etc.)
Código de inicio…
-- CREAR DATOS
CREATE OR REPLACE TABLE data_to_be_masked(first_name varchar, last_name varchar,hero_name varchar);
INSERT INTO data_to_be_masked (first_name, last_name, hero_name) VALUES ('Eveleen', 'Danzelman','The Quiet Antman');
INSERT INTO data_to_be_masked (first_name, last_name, hero_name) VALUES ('Harlie', 'Filipowicz','The Yellow Vulture');
INSERT INTO data_to_be_masked (first_name, last_name, hero_name) VALUES ('Mozes', 'McWhin','The Broken Shaman');
INSERT INTO data_to_be_masked (first_name, last_name, hero_name) VALUES ('Horatio', 'Hamshere','The Quiet Charmer');
INSERT INTO data_to_be_masked (first_name, last_name, hero_name) VALUES ('Julianna', 'Pellington','Professor Ancient Spectacle');
INSERT INTO data_to_be_masked (first_name, last_name, hero_name) VALUES ('Grenville', 'Southouse','Fire Wonder');
INSERT INTO data_to_be_masked (first_name, last_name, hero_name) VALUES ('Analise', 'Beards','Purple Fighter');
INSERT INTO data_to_be_masked (first_name, last_name, hero_name) VALUES ('Darnell', 'Bims','Mister Majestic Mothman');
INSERT INTO data_to_be_masked (first_name, last_name, hero_name) VALUES ('Micky', 'Shillan','Switcher');
INSERT INTO data_to_be_masked (first_name, last_name, hero_name) VALUES ('Ware', 'Ledstone','Optimo');
--CREAR ROLE
CREATE ROLE foo1;
CREATE ROLE foo2;
GRANT ROLE foo1 TO USER <ENTER USERNAME HERE>;
GRANT ROLE foo2 TO USER <ENTER USERNAME HERE>;
Resultado:
–¿Puedes ver los datos?
USE ROLE ACCOUNTADMIN;
SELECT * FROM data_to_be_masked;
–¿Qué puede ver foo1?
USE ROLE foo1;
SELECT * FROM data_to_be_masked;
–¿Y foo2?
USE ROLE foo2;
SELECT * FROM data_to_be_masked;
NOTA DEL ADMINISTRADOR:
Este desafío se aclaró el 30-09-2022 y se agregó la última viñeta para el desafío.
Cualquier solución dada antes de este tiempo podría no ser una solución total a la pregunta.
Recuerda que si deseas participar:
- 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).
- 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).
- 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.
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.