Перейти к основному содержимому

Обзор привилегий

В этой теме описываются основные концепции системы привилегий Selena. Привилегии определяют, какие пользователи могут выполнять какие операции с какими объектами, что позволяет более безопасно управлять данными и ресурсами с детальной настройкой.

ПРИМЕЧАНИЕ: Привилегии, описанные в этой теме, доступны только начиная с версии 1.5.0. Фреймворк привилегий и синтаксис в v3.0 не совместимы с предыдущими версиями. После обновления до v3.0 большинство ваших исходных привилегий сохраняются, за исключением привилегий для специфических операций. Подробные различия см. в разделе [Примечания к обновлению] в Привилегии, поддерживаемые в Selena.

Selena использует две модели привилегий:

  • Контроль доступа на основе ролей (RBAC): Привилегии назначаются ролям, которые затем назначаются пользователям. В этом случае привилегии передаются пользователям через роли.
  • Контроль доступа на основе идентичности (IBAC): Привилегии напрямую назначаются пользовательским идентичностям.

Таким образом, максимальная область привилегий каждой пользовательской идентичности представляет собой объединение её собственных привилегий и привилегий ролей, назначенных этой пользовательской идентичности.

Основные концепции для понимания системы привилегий Selena:

  • Объект: Сущность, к которой может быть предоставлен доступ. Если доступ не разрешён явно, он запрещён. Примеры объектов включают CATALOG, DATABASE, TABLE и VIEW. Для получения дополнительной информации см. Привилегии, поддерживаемые в Selena.
  • Привилегия: Определённый уровень доступа к объекту. Множественные привилегии могут использоваться для контроля детализации доступа, предоставляемого к объекту. Привилегии специфичны для объектов. Разные объекты могут иметь разные привилегии. Примеры привилегий включают SELECT, ALTER и DROP.
  • Пользовательская идентичность: уникальная идентичность пользователя, а также сущность, которой могут быть предоставлены привилегии. Пользовательская идентичность представляется как username@'userhost', состоящая из имени пользователя и IP-адреса, с которого пользователь входит в систему. Использование идентичности упрощает настройку атрибутов. Пользовательские идентичности, имеющие одинаковое имя пользователя, разделяют одинаковые атрибуты. Если вы настраиваете атрибут для имени пользователя, этот атрибут действует на все пользовательские идентичности, имеющие это имя пользователя.
  • Роль: Сущность, которой могут быть предоставлены привилегии. Роли представляют собой абстрактную коллекцию привилегий. Роли могут назначаться пользователям. Роли также могут назначаться другим ролям, создавая иерархию ролей. Для упрощения управления данными Selena предоставляет системно-определённые роли. Для большей гибкости вы также можете создавать пользовательские роли в соответствии с бизнес-требованиями.

На следующем рисунке показан пример управления привилегиями в рамках моделей привилегий RBAC и IBAC.

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

privilege management

Объекты и привилегии

Объекты имеют логическую иерархию, которая связана с концепцией, которую они представляют. Например, Database содержится в Catalog, а Table, View, Materialized View и Function содержатся в Database. На следующем рисунке показана иерархия объектов в системе Selena.

privilege objects

Каждый объект имеет набор элементов привилегий, которые могут быть предоставлены. Эти привилегии определяют, какие операции могут выполняться с этими объектами. Вы можете предоставлять и отзывать привилегии у ролей или пользователей с помощью команд GRANT и REVOKE.

Пользователи

Пользовательская идентичность

В Selena каждый пользователь идентифицируется уникальным пользовательским ID. Он состоит из IP-адреса (пользовательский хост) и имени пользователя в формате username @'userhost'. Selena идентифицирует пользователей с одинаковым именем пользователя, но с разных IP-адресов, как разные пользовательские идентичности. Например, user1@'172.65.xx.1' и 172.65.xx.2' — это две пользовательские идентичности.

Другое представление пользовательской идентичности — username @['domain'], где domain — это доменное имя, которое может быть разрешено DNS как набор IP-адресов. username @['domain'] в конечном итоге представляется как набор username@'userhost'. Вы можете использовать % для части userhost для нечёткого соответствия. Если userhost не указан, по умолчанию используется '%', что означает пользователей с одинаковым именем, вошедших с любого хоста.

Предоставление привилегий пользователям

Пользователи — это сущности, которым могут быть предоставлены привилегии. Как привилегии, так и роли могут назначаться пользователям. Максимальная область привилегий каждой пользовательской идентичности представляет собой объединение её собственных привилегий и привилегий ролей, назначенных этой пользовательской идентичности. Selena гарантирует, что каждый пользователь может выполнять только авторизованные операции.

Мы рекомендуем использовать роли для передачи привилегий в большинстве случаев. Например, после создания роли вы можете предоставить привилегии роли, а затем назначить роль пользователям. Если вы хотите предоставить временные или специальные привилегии, вы можете напрямую предоставить их пользователям. Это упрощает управление привилегиями и обеспечивает гибкость.

Роли

Роли — это сущности, которым могут быть предоставлены и отозваны привилегии. Роли можно рассматривать как коллекцию привилегий, которые могут назначаться пользователям, позволяя им выполнять необходимые действия. Пользователю может быть назначено несколько ролей, чтобы он мог выполнять различные действия, используя отдельные наборы привилегий. Для упрощения управления Selena рекомендует управлять привилегиями через роли. Специальные и временные привилегии могут напрямую предоставляться пользователям.

Для упрощения управления Selena предоставляет несколько системно-определённых ролей с конкретными привилегиями, что помогает удовлетворить требования ежедневного управления и обслуживания. Вы также можете гибко настраивать роли для удовлетворения конкретных бизнес-потребностей и требований безопасности. Обратите внимание, что область привилегий системно-определённых ролей не может быть изменена.

После активации роли пользователи могут выполнять операции, авторизованные этой ролью. Вы можете установить роли по умолчанию, которые автоматически активируются при входе пользователя в систему. Пользователи также могут вручную активировать роль, принадлежащую этому пользователю, в текущей сессии.

Системно-определённые роли

Selena предоставляет несколько типов системно-определённых ролей.

roles

  • root: имеет глобальные привилегии. По умолчанию пользователь root имеет роль root. После создания кластера Selena система автоматически генерирует пользователя root с привилегиями root. Поскольку пользователь и роль root имеют все привилегии системы, мы рекомендуем создать новых пользователей и роли для последующих операций, чтобы предотвратить любые рискованные операции. Храните пароль пользователя root в безопасности.

  • cluster_admin: имеет привилегии управления кластером для выполнения операций, связанных с узлами, таких как добавление или удаление узлов. cluster_admin имеет привилегии для добавления, удаления и вывода из эксплуатации узлов кластера. Мы рекомендуем не назначать cluster_admin или любые пользовательские роли, содержащие эту роль, в качестве роли по умолчанию любому пользователю, чтобы предотвратить неожиданные изменения узлов.

  • db_admin: имеет привилегии управления базой данных, включая привилегии для выполнения всех операций с catalog, database, table, view, materialized view, function, global function, resource group и плагинами.

  • user_admin: имеет административные привилегии для пользователей и ролей, включая привилегии для создания пользователей, ролей и привилегий.

    Вышеуказанные системно-определённые роли предназначены для агрегации сложных привилегий базы данных для упрощения вашего ежедневного управления. Область привилегий вышеуказанных ролей не может быть изменена.

    Кроме того, если вам нужно предоставить конкретные привилегии всем пользователям, Selena также предоставляет системно-определённую роль public.

  • public: Эта роль принадлежит любому пользователю и активируется по умолчанию в любой сессии, включая добавление новых пользователей. Роль public не имеет никаких привилегий по умолчанию. Вы можете изменить область привилегий этой роли.

Пользовательские роли

Вы можете создавать пользовательские роли для удовлетворения конкретных бизнес-требований и изменять их область привилегий. В то же время, для удобства управления, вы можете назначать роли другим ролям для создания иерархии привилегий и наследования. Затем привилегии, связанные с ролью, наследуются другой ролью.

Иерархия ролей и наследование привилегий

На следующем рисунке показан пример наследования привилегий.

Примечание: Максимальное количество уровней наследования для роли по умолчанию составляет 16. Отношения наследования не могут быть двунаправленными.

role inheritance

Как показано на рисунке:

  • role_s назначается role_p. role_p неявно наследует priv_1 от role_s.
  • role_p назначается role_g, role_g неявно наследует priv_2 от role_p и priv_1 от role_s.
  • После назначения роли пользователю, пользователь также получает привилегии этой роли.

Активные роли

Активные роли позволяют пользователям применять привилегии роли в текущей сессии. Вы можете использовать SELECT CURRENT_ROLE(); для просмотра активных ролей в текущей сессии. Для получения дополнительной информации см. current_role.

Роли по умолчанию

Роли по умолчанию автоматически активируются при входе пользователя в кластер. Это может быть роль, принадлежащая одному или нескольким пользователям. Администратор может устанавливать роли по умолчанию, используя ключевое слово DEFAULT ROLE в CREATE USER и может изменять роли по умолчанию, используя ALTER USER.

Пользователи также могут изменять свои роли по умолчанию, используя SET DEFAULT ROLE.

Роли по умолчанию обеспечивают базовую защиту привилегий для пользователей. Например, Пользователь A имеет role_query и role_delete, которые имеют привилегии запроса и удаления соответственно. Мы рекомендуем использовать только role_query в качестве роли по умолчанию, чтобы предотвратить потерю данных, вызванную высокорискованными операциями, такими как DELETE или TRUNCATE. Если вам нужно выполнить эти операции, вы можете сделать это после ручной установки активных ролей.

Пользователь, который не имеет роли по умолчанию, всё ещё имеет роль public, которая автоматически активируется после входа пользователя в кластер.

Ручная активация ролей

В дополнение к ролям по умолчанию, пользователи также могут вручную активировать одну или несколько существующих ролей в рамках сессии. Вы можете использовать SHOW GRANTS для просмотра привилегий и ролей, которые могут быть активированы, и использовать SET ROLE для настройки активных ролей, которые действуют в текущей сессии.

Обратите внимание, что команды SET ROLE перезаписывают друг друга. Например, после входа пользователя в систему default_role активируется по умолчанию. Затем пользователь выполняет SET ROLE role_s. В этот момент пользователь имеет только привилегии role_s и свои собственные привилегии. default_role перезаписывается.

Ссылки