IMetabasePolicy.AllowDBMSObjectsCreation

Синтаксис

AllowDBMSObjectsCreation: Boolean;

Описание

Свойство AllowDBMSObjectsCreation определяет признак возможности создания объектов в базе данных СУБД  PostgreSQL пользователями, которые не являются владельцами схемы.

Комментарии

Допустимые значения:

Важно. ООО «ФОРСАЙТ» не несет ответственности за некорректное использование свойства.
Использование свойства может привести к уязвимостям, проблемам обновления пользователей и доступа к объектам у пользователей, которые являются администраторами репозитория.
Для получения информации о возможных проблемах обратитесь к статье на сайте EDB.
При совместном использовании свойства AllowDBMSObjectsCreation со значением true и флажка «Управление правами на объекты» владелец схемы не сможет удалить объекты с сервера базы данных, которые созданы другими пользователями. Удаление будет доступно только из репозитория.
На уровне платформы нет возможности полностью управлять доступом, может потребоваться раздача прав на уровне СУБД.

Для минимизации возможных проблем необходимо выполнить подготовку. Этапы подготовки для использования свойства зависят от используемой схемы:

    1. Создайте в СУБД роль:

CREATE ROLE "ROLE_NAME";

Где ROLE_NAME - имя создаваемой роли.

Важно. Имя пользователя ADMIN недопустимо для использования.

    1. Включите в созданную роль учётные записи пользователей, которым нужно будет разрешить создание объектов в схеме, помимо владельца схемы:

GRANT "ROLE_NAME" TO "USER_NAME";

Где USER_NAME - имя пользователя.

    1. Раздайте гранты CREATE и USAGE на схему с данными для созданной роли:

GRANT CREATE, USAGE ON SCHEMA "SCHEMA_NAME" TO "ROLE_NAME";

Где SCHEMA_NAME - идентификатор пользовательской схемы;

    1. Включите возможность создания объектов, для этого установите свойству AllowDBMSObjectsCreation значение true.

CREATE ROLE "ROLE_NAME";

Где ROLE_NAME - имя создаваемой роли.

Важно. Имя пользователя ADMIN недопустимо для использования.

    1. Включите в созданную роль учётные записи пользователей, которым нужно будет разрешить создание объектов в схеме, помимо владельца схемы:

GRANT "ROLE_NAME" TO "USER_NAME";

Где USER_NAME - имя пользователя.

GRANT CREATE, USAGE ON SCHEMA "SCHEMA_NAME" TO "ROLE_NAME";

    1. Создайте в СУБД роль:

CREATE ROLE "ROLE_NAME";

Где ROLE_NAME - имя создаваемой роли.

Важно. Имя пользователя ADMIN недопустимо для использования.

    1. Включите в созданную роль учётные записи пользователей, которым нужно будет разрешить создание объектов в схеме, помимо владельца схемы:

GRANT "ROLE_NAME" TO "USER_NAME";

Где USER_NAME - имя пользователя.

    1. Раздайте грант CREATE на схему с данными для созданной роли:

GRANT CREATE ON SCHEMA "public" TO "ROLE_NAME";

    1. Отзовите грант CREATE на схему у роли PUBLIC. Пункт выполняется, если схема была создана на версии СУБД PostgreSQL версии 14 и ниже:

REVOKE CREATE ON SCHEMA "public" FROM PUBLIC;

Примечание. При создании схемы на версии СУБД PostgreSQL версии 15 и выше пункт выполнять не требуется.

    1. Включите возможность создания объектов, для этого установите свойству AllowDBMSObjectsCreation значение true.

CREATE ROLE "ROLE_NAME";

Где ROLE_NAME - имя создаваемой роли.

Важно. Имя пользователя ADMIN недопустимо для использования.

    1. Включите в созданную роль учётные записи пользователей, которым нужно будет разрешить создание объектов в схеме, помимо владельца схемы:

GRANT "ROLE_NAME" TO "USER_NAME";

Где USER_NAME - имя пользователя.

GRANT CREATE ON SCHEMA "public" TO "DB_OWNER";

Где DB_OWNER - имя владельца базы данных.

    1. Раздайте грант CREATE на схему для созданной роли:

GRANT CREATE ON SCHEMA "public" TO "ROLE_NAME";

REVOKE CREATE ON SCHEMA "public" FROM PUBLIC;

Примечание. При создании схемы на версии СУБД PostgreSQL версии 15 и выше пункт выполнять не требуется.

Пример

Для выполнения примера выполните шаги описанные выше.

Добавьте ссылку на системную сборку Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    MS: IMetabaseSecurity;
    MU: IMetabasePolicy;
Begin
    MB := MetabaseClass.Active;
    MS := MB.Security;
    MU := MS.Policy;
    // Разрешим создание объектов в базе данных пользователями, не являющимися владельцами схемы
    MU.AllowDBMSObjectsCreation := True;
    // Сохраним изменения
    MS.Apply;
End Sub UserProc;

В результате выполнения примера создание объектов в базе данных разрешено владельцу схемы и привилегированным пользователям.

См. также:

IMetabasePolicy