> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Управление пользователями базы данных

> На этой странице описано, как администраторы могут добавлять и удалять пользователей базы данных, а также управлять их назначениями

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

В этом руководстве показаны два способа управления пользователями базы данных: через консоль SQL и непосредственно в базе данных.

<div id="sql-console-passwordless-authentication">
  ### Беспарольная аутентификация в консоли SQL
</div>

Пользователи консоли SQL создаются для каждого сеанса и проходят аутентификацию с помощью сертификатов X.509, которые автоматически обновляются. Пользователь удаляется после завершения сеанса. При составлении списков доступа для аудита перейдите на вкладку Settings сервиса в консоли и учитывайте доступ к консоли SQL наряду с пользователями базы данных, существующими в базе данных. Если настроены пользовательские роли, доступ пользователя указан в роли, имя которой оканчивается на его имя пользователя.

<div id="sql-console-users-and-roles">
  ## Пользователи и роли консоли SQL
</div>

Базовые роли консоли SQL можно назначать пользователям с разрешениями Service Read Only и Service Admin. Подробнее см. в разделе [Управление назначением ролей консоли SQL](/ru/products/cloud/guides/security/cloud-access-management/manage-sql-console-role-assignments). В этом руководстве показано, как создать пользовательскую роль для пользователя консоли SQL.

Чтобы создать пользовательскую роль для пользователя консоли SQL и назначить ей роль общего назначения, выполните следующие команды. Адрес электронной почты должен совпадать с адресом электронной почты пользователя в консоли.

<Steps>
  <Step>
    #### Создайте `database_developer` и выдайте разрешения

    Создайте роль `database_developer` и выдайте разрешения `SHOW`, `CREATE`, `ALTER` и `DELETE`.

    ```sql theme={null}
    CREATE ROLE OR REPLACE database_developer;
    GRANT SHOW ON * TO database_developer;
    GRANT CREATE ON * TO database_developer;
    GRANT ALTER ON * TO database_developer;
    GRANT DELETE ON * TO database_developer;
    ```
  </Step>

  <Step>
    #### Создайте роль пользователя консоли SQL

    Создайте роль для пользователя консоли SQL [my.user@domain.com](mailto:my.user@domain.com) и назначьте ей роль `database_developer`.

    ```sql theme={null}
    CREATE ROLE OR REPLACE `sql-console-role:my.user@domain.com`;
    GRANT database_developer TO `sql-console-role:my.user@domain.com`;
    ```
  </Step>

  <Step>
    #### При использовании консоли SQL пользователю назначается новая роль

    Каждый раз, когда пользователь работает в консоли SQL, ему назначается роль, связанная с его адресом электронной почты.
  </Step>
</Steps>

<div id="database-authentication">
  ## Аутентификация в базе данных
</div>

<div id="database-user-id--password">
  ### Идентификатор пользователя базы данных и пароль
</div>

Используйте метод SHA256\_hash при [создании учётных записей пользователей](/ru/reference/statements/create/user) для защиты паролей. Пароли пользователей базы данных ClickHouse должны содержать не менее 12 символов и соответствовать требованиям сложности: включать прописные и строчные буквы, цифры и/или специальные символы.

<Tip>
  **Безопасно генерируйте пароли**

  Поскольку пользователи без административных привилегий не могут сами задавать пароль, попросите пользователя заранее вычислить хеш пароля с помощью генератора,
  например [этого](https://tools.keycdn.com/sha256-online-generator), прежде чем передавать его администратору для настройки учётной записи.
</Tip>

```sql theme={null}
CREATE USER userName IDENTIFIED WITH sha256_hash BY 'hash';
```

<div id="database-ssh">
  ### Пользователь базы данных с SSH-аутентификацией
</div>

Чтобы настроить SSH-аутентификацию для пользователя базы данных ClickHouse Cloud.

1. С помощью ssh-keygen создайте пару ключей.
2. Используйте открытый ключ, чтобы создать пользователя.
3. Назначьте пользователю роли и/или разрешения.
4. Используйте закрытый ключ для аутентификации в сервисе.

Подробное пошаговое руководство с примерами см. в статье [How to connect to ClickHouse Cloud using SSH keys](/ru/resources/support-center/knowledge-base/cloud-services/how-to-connect-to-ch-cloud-using-ssh-keys) в нашей базе знаний.

<div id="database-permissions">
  ## Разрешения на уровне базы данных
</div>

Настройте следующие параметры в сервисах и базах данных с помощью SQL-оператора [GRANT](/ru/reference/statements/grant).

| Role             | Description                                                                     |
| :--------------- | :------------------------------------------------------------------------------ |
| По умолчанию     | Полный административный доступ к сервисам                                       |
| Пользовательская | Настраивается с помощью SQL-оператора [`GRANT`](/ru/reference/statements/grant) |

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

На иллюстрации ниже показаны различные способы выдачи разрешений пользователю.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/pb3p2qvhHWkIWhRw/images/cloud/security/cloud-access-management/user_grant_permissions_options.png?fit=max&auto=format&n=pb3p2qvhHWkIWhRw&q=85&s=e08805d117462cf6ed994e52878cfb36" alt="Иллюстрация, показывающая различные способы выдачи разрешений пользователю" size="md" background="black" width="626" height="501" data-path="images/cloud/security/cloud-access-management/user_grant_permissions_options.png" />

<div id="initial-settings">
  ### Начальные настройки
</div>

В базах данных автоматически создается учетная запись с именем `default`, и при создании сервиса ей назначается `default_role`. Пользователю, который создает сервис, показывается автоматически сгенерированный случайный пароль, назначенный учетной записи `default` при создании сервиса. После первоначальной настройки пароль больше не отображается, но позже его может изменить любой пользователь с правами Service Admin в консоли. Эта учетная запись или учетная запись с привилегиями Service Admin в консоли может в любое время создавать дополнительных пользователей базы данных и роли.

<Note>
  Чтобы изменить пароль, назначенный учетной записи `default` в консоли, перейдите в меню Services слева, откройте сервис, перейдите на вкладку Settings и нажмите кнопку Reset password.
</Note>

Мы рекомендуем создать новую учетную запись пользователя, связанную с конкретным человеком, и выдать этому пользователю `default_role`. Это нужно для того, чтобы действия пользователей можно было соотнести с их идентификаторами, а учетная запись `default` оставалась зарезервированной для аварийного доступа.

```sql theme={null}
  CREATE USER userID IDENTIFIED WITH sha256_hash by 'hashed_password';
  GRANT default_role to userID;
```

Вы можете использовать генератор SHA256-хеша или такую библиотеку, как `hashlib` в Python, чтобы преобразовать пароль длиной не менее 12 символов с достаточной сложностью в строку SHA256 и передать её системному администратору в качестве пароля. Это гарантирует, что администратор не увидит пароль и не будет работать с ним в открытом виде.

<div id="database-access-listings-with-sql-console-users">
  ### Списки доступа к базе данных для пользователей консоли SQL
</div>

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

<Steps>
  <Step>
    #### Получите список всех привилегий в базе данных

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

    ```sql theme={null}
    SELECT grants.user_name,
    grants.role_name,
    users.name AS role_member,
    grants.access_type,
    grants.database,
    grants.table
    FROM system.grants LEFT OUTER JOIN system.role_grants ON grants.role_name = role_grants.granted_role_name
    LEFT OUTER JOIN system.users ON role_grants.user_name = users.name

    UNION ALL

    SELECT grants.user_name,
    grants.role_name,
    role_grants.role_name AS role_member,
    grants.access_type,
    grants.database,
    grants.table
    FROM system.role_grants LEFT OUTER JOIN system.grants ON role_grants.granted_role_name = grants.role_name
    WHERE role_grants.user_name is null;
    ```
  </Step>

  <Step>
    #### Сопоставьте список привилегий с пользователями консоли, у которых есть доступ к консоли SQL

    Сопоставьте этот список с пользователями консоли, у которых есть доступ к консоли SQL.

    a. Перейдите в консоль.

    b. Выберите нужный сервис.

    c. Слева выберите Settings.

    d. Прокрутите до раздела доступа к консоли SQL.

    e. Нажмите ссылку с количеством пользователей, имеющих доступ к базе данных: `There are # users with access to this service.`, чтобы открыть список пользователей.
  </Step>
</Steps>

<div id="warehouse-users">
  ## Пользователи хранилища
</div>

Пользователи хранилища используются всеми сервисами в рамках одного хранилища. Дополнительные сведения см. в разделе [управление доступом к хранилищу](/ru/products/cloud/features/infrastructure/warehouses#access-controls).
