Spec-Zone.ru › MariaDB

СОЗДАНИЕ РОЛИ

Синтаксис

CREATE [OR REPLACE] ROLE [IF NOT EXISTS] role 
  [WITH ADMIN 
    {CURRENT_USER | CURRENT_ROLE | user | role}]

Описание

Оператор CREATE ROLE создает одну или несколько ролей MariaDB. Для его использования необходимо иметь глобальное разрешение CREATE USER или разрешение INSERT для базы данных mysql. Для каждой учетной записи CREATE ROLE создается новая строка в таблице mysql.user без разрешений и с соответствующим полем is_role установленным в значение Y. Также создается запись в таблице mysql.roles_mapping.

Если указанные роли уже существуют, ERROR 1396 (HY000). Если произойдет ошибка, CREATE ROLE все равно создаст роли, которые не приведут к ошибке. Максимальная длина имени роли составляет 128 символов. Имена ролей могут быть заключены в кавычки, как описано на странице Имена идентификаторов.

Только одна ошибка генерируется для всех ролей, которые не были созданы:

ERROR 1396 (HY000): Operation CREATE ROLE failed for 'a','b','c'

Неуспешные CREATE или DROP операции для пользователей и ролей приводят к одному и тому же коду ошибки.

PUBLIC и NONE зарезервированы и не могут использоваться в качестве имен ролей. NONE используется для отмены роли, а PUBLIC имеет специальное назначение в других системах, таких как Oracle, поэтому зарезервировано для совместимости.

Список допустимых идентификаторов для использования в качестве имен ролей см. в разделе Имена идентификаторов.

С ADMIN

Необязательная фраза WITH ADMIN определяет, может ли текущий пользователь, текущая роль или другой пользователь или роль использовать вновь созданную роль. Если фраза опущена, WITH ADMIN CURRENT_USER рассматривается как значение по умолчанию, что означает, что текущий пользователь сможет РАЗРЕШИТЬ эту роль пользователям.

ИЛИ ЗАМЕНИТЬ

Если используется необязательная фраза OR REPLACE, она служит сокращением для:

DROP ROLE IF EXISTS name;
CREATE ROLE name ...;

ЕСЛИ НЕ СУЩЕСТВУЕТ

Когда используется фраза IF NOT EXISTS, MariaDB возвращает предупреждение вместо ошибки, если указанная роль уже существует. Не может использоваться совместно с OR REPLACE.

Примеры

CREATE ROLE journalist;

CREATE ROLE developer WITH ADMIN lorinda@localhost;

Назначение роли другому пользователю. Только у пользователя lorinda@localhost есть разрешение назначить роль developer.

 SELECT USER();
+-------------------+
| USER()            |
+-------------------+
| henning@localhost |
+-------------------+
...
GRANT developer TO ian@localhost;
Access denied for user 'henning'@'localhost'

 SELECT USER();
+-------------------+
| USER()            |
+-------------------+
| lorinda@localhost |
+-------------------+

GRANT m_role TO ian@localhost;

Фразы OR REPLACE и IF NOT EXISTS. Роль journalist уже существует:

CREATE ROLE journalist;
ERROR 1396 (HY000): Operation CREATE ROLE failed for 'journalist'

CREATE OR REPLACE ROLE journalist;
Query OK, 0 rows affected (0.00 sec)

CREATE ROLE IF NOT EXISTS journalist;
Query OK, 0 rows affected, 1 warning (0.00 sec)
SHOW WARNINGS;
+-------+------+---------------------------------------------------+
| Level | Code | Message                                           |
+-------+------+---------------------------------------------------+
| Note  | 1975 | Can't create role 'journalist'; it already exists |
+-------+------+---------------------------------------------------+

См. также

  • Имена идентификаторов
  • Обзор ролей
  • УДАЛИТЬ РОЛЬ
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/create-role/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API