Как мне установить роль опытного пользователя для базы данных Snowflake? - PullRequest
0 голосов
/ 03 ноября 2019

По сути, я хочу

  1. моего пользователя "DBA";исходная учетная запись, которая имеет роли SYSADMIN и ACCOUNTADMIN, чтобы иметь возможность видеть любой объект в базе данных, а также ее данные. Кажется, что по крайней мере на уровне ACCOUNTADMIN я должен быть в состоянии сделать это.
  2. «опытный» пользователь;через роль (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, не живут на уровне схемы для общего применения ко всем таблицам, но на самом деле устанавливают разрешения на уровне объектов, и мой оригинальный подход был просто слишком гранулированным, так как на самом деле я не хочу управлять чем-либо вуровень объекта. Тем не менее, в документе мне неясно, как управлять на более высоком уровне, чем объект, так или иначе, если утверждение на самом деле является просто ярлыком для установки многих привилегий объекта. Как я могу достичь своих первоначальных целей?

Ответы [ 3 ]

2 голосов
/ 03 ноября 2019

Лучше всего в такой ситуации предоставлять все свои пользовательские роли роли SYSADMIN. Это позволяет сисадмину делать все, что может делать SYSADMIN, а также все, что могут делать все остальные роли. У вас есть много вопросов в вашем посте, но я думаю, что это решает многие из них.

0 голосов
/ 06 ноября 2019

Этого можно достичь, используя отображение ROLE на ROLE или обычно «Иерархию ROLE».

grant role Marketing_dev to role SYSADMIN;

Вот подробная статья

0 голосов
/ 05 ноября 2019

То, как я это сделал, я создал супер роль 'superole' и назначил sysadmin, securityadmin и accountadmin на эту роль. Затем я прикрепил суперроля к тому, кем бы я хотел стать моим администратором ...

...