I am looking for your suggestions on Snowflake Role based Access control hierarchy which I created for a Snowflake data warehousing project.
Basically, we need to maintain different client data with different databases. This database creation process is automated with a script including create databases(DEV, QA and PROD), roles etc.. for a specific client. Here I have created a hierarchy with 3 different default roles for a database.
- ADMIN_{ENV}_{CLIENT_ID}
- READ_WRITE_{ENV}_{CLIENT_ID}
- READ_{ENV}_{CLIENT_ID}
Then I created a set of roles which have access to all databases like..
- ADMIN_{ENV}_ALL
- READ_WRITE_{ENV}_ALL
- READ_{ENV}_ALL
Hope below image illustrates that..
My questions are:
- Is this right approach to continue?
- When creating database objects, which role should I use? SYSADMIN? For example: for creating database objects in CLIENT_1_DEV_DB database, should I use ADMIN_DEV_CLIENT_1 role or SYSADMIN?
- ADMIN_DEV_CLIENT_1 role should be able to create new users and grant the privileges. In that case should I use USERADMIN or SECURITYADMIN? Are there any methods to restrict that to database level?
- There is a use case to clone a schema in a database if any issue occurred. In that case How to manage the grants? When we clone a schema, the roles are not retained to the cloned schema. In that case what is the best approach to copy the grants. having another role with MANAGE GRANTS privileges and use that?
Hope you suggestions on these. Thanks