Как создать роль, которая может получить доступ только к выбранным таблицам во время выполнения

Я использую базу данных SAP HANA в контейнере HDI и создал соответствующего администратора контейнера HDI. Я хотел бы иметь возможность предоставлять пользователям (в целях поддержки) доступ не ко всей схеме, а только к нескольким выбранным таблицам. Как это сделать? Все примеры, которые я нашел в Интернете, выглядят так и предоставляют доступ только ко всей схеме

CREATE ROLE SCHEMA_NAME.ROLE_NAME NO GRANT TO CREATOR; 
GRANT SELECT ON SCHEMA SCHEMA_NAME TO ROLE_NAME;

Я знаю, что есть возможность использовать файл .hdbrole во время развертывания, где также могут быть записаны привилегии объекта, но, похоже, мне придется запускать развертывание каждый раз, когда мне нужно создать новую роль. И я хотел бы создавать эти роли прямо из консоли SQL. Является ли это возможным? И если да, то как это сделать?


person Jozef    schedule 22.02.2021    source источник


Ответы (1)


Выполняя команды CREATE ROLE и GRANT в консоли SQL, вы создаете роли каталога/среды выполнения. Они не могут быть перенесены в какой-либо другой контейнер или БД, а живут только в этом самом экземпляре базы данных.

Как правило, это не то, что вам нужно при работе с HDI-контейнерами или контейнерными приложениями в целом. Создание объектов схемы «на лету» обычно приводит к операционным проблемам (у кого есть доступ к чему, где, когда, почему, как?), и этого следует избегать.

Но, конечно, вы можете просто подключиться к контейнеру под любым пользователем с соответствующими разрешениями и выполнить эти команды. Сюда входят обычные GRANT SELECT on <table_name> TO <role>; это не обязательно должна быть вся схема.

person Lars Br.    schedule 23.02.2021
comment
Здравствуйте, спасибо - моя проблема в том, что я не могу сделать это ни с одним из пользователей, которые у меня есть. Не могу сделать это с помощью DBADMIN, администратора HDI, администратора группы контейнеров HDI или администратора контейнера HDI (я назначил им все разрешения по умолчанию — T_DEFAULT_DI_ADMIN_PRIVILEGES, T_DEFAULT_CONTAINER_GROUP_ADMIN_PRIVILEGES или T_DEFAULT_CONTAINER_ADMIN_PRIVILEGES). Знаете ли вы, какую хранимую процедуру мне нужно вызвать, чтобы назначить им необходимые права? - person Jozef; 23.02.2021