По сути, я хочу
- моего пользователя "DBA";исходная учетная запись, которая имеет роли SYSADMIN и ACCOUNTADMIN, чтобы иметь возможность видеть любой объект в базе данных, а также ее данные. Кажется, что по крайней мере на уровне ACCOUNTADMIN я должен быть в состоянии сделать это.
- «опытный» пользователь;через роль (dr_uce_role) я могу назначить на уровне базы данных, где пользователь может делать практически все внутри базы данных.
Я думал, что сделал роль опытного пользователя со следующим кодом:
--grant power to engineer
grant all privileges on database dr_ev to dr_uce_role;
grant all privileges on all schemas in database dr_ev to dr_uce_role;
grant all privileges on all tables in schema dr_ev.public to dr_uce_role;
grant all privileges on all views in schema dr_ev.public to dr_uce_role;
grant select on future tables in schema dr_ev.public to dr_uce_role;
grant select on future views in schema dr_ev.public to dr_uce_role;
grant all privileges on all tables in schema dr_ev.stg to dr_uce_role;
grant all privileges on all views in schema dr_ev.stg to dr_uce_role;
grant select on future tables in schema dr_ev.stg to dr_uce_role;
grant select on future views in schema dr_ev.stg to dr_uce_role;
Этот пользователь затем создал объекты в схемах. Однако мой пользователь "DBA" в SYSADMIN вообще не мог видеть объекты. С ролью ACCOUNTADMIN пользователь может видеть объекты, но не запрашивать их. Насколько я понимаю, ACCOUNTADMIN является учетной записью верхнего уровня, и в любом случае может владеть этими объектами, поэтому, если предполагается, что это функция безопасности, я не совсем понимаю, как она обеспечивает большую защиту, поскольку она всегда может похитить владельца?
Я попытался сменить владельца объекта с ACCOUNTADMIN на SYSADMIN, чтобы обнаружить, что у него есть привилегия блокировки;
grant ownership on dr_ev.stg.load_opportunity to sysadmin;
Ошибка выполнения SQL: существует зависимое предоставление привилегии «DELETE» для защищаемой «DR_EV.STG.LOAD_OPPORTUNITY» роли «DR_UCE_ROLE». Это должно быть отозвано в первую очередь. Может существовать более одного зависимого гранта: используйте команду «SHOW GRANTS», чтобы просмотреть их. Чтобы отозвать все зависимые права при передаче права собственности на объект, используйте удобную команду «ВЛАДЕНИЕ НА ГРАНТ» ДЛЯ ОТМЕНЫ ТЕКУЩИХ ГРАНТОВ. - хотя это оставило моего опытного пользователя неспособным видеть объекты. Поэтому я предоставил им обратно
grant all privileges on all tables in schema dr_ev.stg to dr_uce_role;
Однако я хочу, чтобы мой опытный пользователь мог создать или заменить эту таблицу. Я полагаю, что для этого требуется привилегия DROP TABLE, хотя, очевидно, мои полномочия опытного пользователя не предоставляют ее, и мне неясно, как мне ее предоставлять?
Я не скажу, что у меня есть лучшее понимание привилегий Snowflake. и мне интересно, если приведенные выше операторы, такие как grant all privileges on all tables in schema
, не живут на уровне схемы для общего применения ко всем таблицам, но на самом деле устанавливают разрешения на уровне объектов, и мой оригинальный подход был просто слишком гранулированным, так как на самом деле я не хочу управлять чем-либо вуровень объекта. Тем не менее, в документе мне неясно, как управлять на более высоком уровне, чем объект, так или иначе, если утверждение на самом деле является просто ярлыком для установки многих привилегий объекта. Как я могу достичь своих первоначальных целей?