Si vous avez révisé votre SnowPro, vous savez que lorsque vous CLONEZ un objet, vous ne pouvez répliquer les autorisations sur cet objet que s’il s’agit d’une table. Mais la vie ne serait-elle pas plus simple si cétait aussi le cas pour les autres objets ? Eh bien… faites en sorte que ce soit le cas !
Votre défi consiste à créer une procédure stockée qui crée non seulement un clone d’un schéma, mais réplique également toutes les autorisations sur ce schéma. La procédure stockée devra être capable d’accepter un paramètre ‘AT’ ou ‘BEFORE’ fourni par l’utilisateur·ice.
Code de Démarrage:
create or replace role frosty_role_one;
create or replace role frosty_role_two;
create or replace role frosty_role_three;
create or replace schema cold_lonely_schema;
create or replace table cold_lonely_schema.table_one (key int, value varchar);
grant all on schema cold_lonely_schema to frosty_role_one;
grant all on schema cold_lonely_schema to frosty_role_two;
grant all on schema cold_lonely_schema to frosty_role_three;
grant all on table cold_lonely_schema.table_one to frosty_role_one;
grant all on table cold_lonely_schema.table_one to frosty_role_two;
grant all on table cold_lonely_schema.table_one to frosty_role_three;
create or replace procedure schema_clone_with_copy_grants(database_name string,
<code_here>
call schema_clone_with_copy_grants('frosty_friday',
'cold_lonely_schema',
'frosty_friday',
'cold_lonely_clone',
NULL);
select *
from table(information_schema.query_history_by_session())
order by start_time desc;
Faites attention aux paramètres passés à la fonction :
- database_name = cela doit être le nom de la base de données du schéma d’origine
- schema_name = cela doit être le nom du schéma d’origine
- target_database = cela doit être la base de données du schéma cloné
- cloned_schema_name = cela doit être le nom du schéma cloné
- at_or_before_statement = votre utilisateur·ice doit être en mesure de fournir un paramètre AT/BEFORE personnalisé qui sera ajouté à la déclaration CREATE … CLONE. Par exemple :
‘at (timestamp => to_timestamp_tz(’04/05/2013 01:02:03’, ‘mm/dd/yyyy hh24:mi:ss’));’, ou
‘before (statement => ‘8e5d0ca9-005e-44e6-b858-a8f5b37c5726′);’
Pour le dernier paramètre ci-dessus, le code de démarrage passe une valeur NULL. Des points bonus pour ceux qui testent que cette partie de leur code fonctionne !
RÉSULTAT
La première requête avec l’instruction ‘call’ devrait produire ce qui suit :
La deuxième devrait produire un résultat comme 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é.
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.