The following code block grants future permission to the role snowboard_role on all future tables and views in a database. This is needed for older Snowflake installations that only support future grants on the schema level.
EXECUTEIMMEDIATE $$-- TODO CHANGE database_nameDECLAREdatabase_nameTEXT :='EXAMPLE_DB'; log_text TEXT; grant_statement TEXT; schema_name TEXT; res_schemas RESULTSET; res resultset;BEGIN log_text :='START - '; grant_statement :='show schemas in database '|| :database_name; res_schemas := (EXECUTEIMMEDIATE :grant_statement);FOR record IN res_schemas DOIF (record."name"!='INFORMATION_SCHEMA') THEN schema_name := :database_name||'.'|| record."name"; grant_statement := 'grant select, references on future tables in schema ' || schema_name || ' to role snowboard_role; ';
res := (EXECUTEIMMEDIATE :grant_statement); grant_statement := 'grant select, references on future views in schema ' || schema_name || ' to role snowboard_role; ';
res := (EXECUTEIMMEDIATE :grant_statement); log_text := log_text || record."name"||' GRANTED - ';ENDIF;ENDFOR;RETURN log_text;END;$$;