AllowDBMSObjectsCreation: Boolean;
Свойство AllowDBMSObjectsCreation определяет признак возможности создания объектов в базе данных СУБД PostgreSQL пользователями, которые не являются владельцами схемы.
Допустимые значения:
True. Создание объектов в базе данных разрешено владельцу схемы и привилегированным пользователям;
False. Создание объектов в базе данных разрешено владельцу схемы. Значение по умолчанию.
Важно. ООО
«ФОРСАЙТ» не несет ответственности за некорректное использование свойства.
Использование свойства может привести к уязвимостям, проблемам обновления
пользователей и доступа к объектам у пользователей, которые являются администраторами
репозитория.
Для получения информации о возможных проблемах обратитесь к статье на сайте
EDB.
При совместном использовании свойства AllowDBMSObjectsCreation
со значением true и флажка «Управление правами на объекты»
владелец схемы не сможет удалить объекты с сервера базы данных, которые
созданы другими пользователями. Удаление будет доступно только из репозитория.
На уровне платформы нет возможности полностью управлять доступом, может
потребоваться раздача прав на уровне СУБД.
Для минимизации возможных проблем необходимо выполнить подготовку. Этапы подготовки для использования свойства зависят от используемой схемы:
метаданные и данные находятся в разных схемах одной базы данных или в разных базах данных:
Создайте в СУБД роль:
CREATE ROLE "ROLE_NAME";
Где ROLE_NAME - имя создаваемой роли.
Важно. Имя пользователя ADMIN недопустимо для использования.
Включите в созданную роль учётные записи пользователей, которым нужно будет разрешить создание объектов в схеме, помимо владельца схемы:
GRANT "ROLE_NAME" TO "USER_NAME";
Где USER_NAME - имя пользователя.
Раздайте гранты CREATE и USAGE на схему с данными для созданной роли:
GRANT CREATE, USAGE ON SCHEMA "SCHEMA_NAME" TO "ROLE_NAME";
Где SCHEMA_NAME - идентификатор пользовательской схемы;
Включите возможность создания объектов, для этого установите свойству AllowDBMSObjectsCreation значение true.
метаданные и данные находятся в одной схеме:
Создайте в СУБД роль:
CREATE ROLE "ROLE_NAME";
Где ROLE_NAME - имя создаваемой роли.
Важно. Имя пользователя ADMIN недопустимо для использования.
Включите в созданную роль учётные записи пользователей, которым нужно будет разрешить создание объектов в схеме, помимо владельца схемы:
GRANT "ROLE_NAME" TO "USER_NAME";
Где USER_NAME - имя пользователя.
Раздайте гранты CREATE и USAGE на схему для созданной роли:
GRANT CREATE, USAGE ON SCHEMA "SCHEMA_NAME" TO "ROLE_NAME";
Включите возможность создания объектов, для этого установите свойству AllowDBMSObjectsCreation значение true.
метаданные и данные находятся в разных схемах одной базы данных или в разных базах данных:
Создайте в СУБД роль:
CREATE ROLE "ROLE_NAME";
Где ROLE_NAME - имя создаваемой роли.
Важно. Имя пользователя ADMIN недопустимо для использования.
Включите в созданную роль учётные записи пользователей, которым нужно будет разрешить создание объектов в схеме, помимо владельца схемы:
GRANT "ROLE_NAME" TO "USER_NAME";
Где USER_NAME - имя пользователя.
Раздайте грант CREATE на схему с данными для созданной роли:
GRANT CREATE ON SCHEMA "public" TO "ROLE_NAME";
Отзовите грант CREATE на схему у роли PUBLIC. Пункт выполняется, если схема была создана на версии СУБД PostgreSQL версии 14 и ниже:
REVOKE CREATE ON SCHEMA "public" FROM PUBLIC;
Примечание. При создании схемы на версии СУБД PostgreSQL версии 15 и выше пункт выполнять не требуется.
Включите возможность создания объектов, для этого установите свойству AllowDBMSObjectsCreation значение true.
метаданные и данные находятся в одной схеме:
Создайте в СУБД роль:
CREATE ROLE "ROLE_NAME";
Где ROLE_NAME - имя создаваемой роли.
Важно. Имя пользователя ADMIN недопустимо для использования.
Включите в созданную роль учётные записи пользователей, которым нужно будет разрешить создание объектов в схеме, помимо владельца схемы:
GRANT "ROLE_NAME" TO "USER_NAME";
Где USER_NAME - имя пользователя.
Раздайте грант CREATE на схему для владельца схемы:
GRANT CREATE ON SCHEMA "public" TO "DB_OWNER";
Где DB_OWNER - имя владельца базы данных.
Раздайте грант CREATE на схему для созданной роли:
GRANT CREATE ON SCHEMA "public" TO "ROLE_NAME";
Отзовите грант CREATE на схему у роли PUBLIC. Пункт выполняется, если схема была создана на СУБД PostgreSQL версии 14 и ниже:
REVOKE CREATE ON SCHEMA "public" FROM PUBLIC;
Примечание. При создании схемы на версии СУБД PostgreSQL версии 15 и выше пункт выполнять не требуется.
Включите возможность создания объектов, для этого установите свойству AllowDBMSObjectsCreation значение true.
Для выполнения примера выполните шаги описанные выше.
Добавьте ссылку на системную сборку 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;
В результате выполнения примера создание объектов в базе данных разрешено владельцу схемы и привилегированным пользователям.
См. также: