diff options
author | bazeltsev <[email protected]> | 2022-07-22 18:28:23 +0300 |
---|---|---|
committer | bazeltsev <[email protected]> | 2022-07-22 18:28:23 +0300 |
commit | 87c6f45c83789bf0e399b6b64ca7ac7324c2abed (patch) | |
tree | 248c1f62d0cc178a3ede9f600fbf9fd3ca0981fb | |
parent | fb0a507d4b1ba95626954c1d6c16e3aa898f14c1 (diff) |
Add static credentials
updated
updated
initial
28 files changed, 269 insertions, 137 deletions
diff --git a/ydb/docs/ru/core/_assets/groups.svg b/ydb/docs/ru/core/_assets/groups.svg new file mode 100644 index 00000000000..cb8c96f2071 --- /dev/null +++ b/ydb/docs/ru/core/_assets/groups.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="421px" height="361px" viewBox="-0.5 -0.5 421 361" style="background-color: rgb(255, 255, 255);"><defs/><g><rect x="140" y="0" width="120" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 20px; margin-left: 141px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px ; white-space: pre"><span>ADMINS</span></div></div></div></div></foreignObject><text x="200" y="24" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">ADMINS</text></switch></g><path d="M 200 80 L 200 46.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 200 41.12 L 203.5 48.12 L 200 46.37 L 196.5 48.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="140" y="80" width="120" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 100px; margin-left: 141px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px ; white-space: pre"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><span>DATABASE-ADMINS</span></div></div></div></div></div></foreignObject><text x="200" y="104" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DATABASE-ADMINS</text></switch></g><path d="M 60 160 L 60 150 Q 60 140 70 140 L 160 140 Q 170 140 170 133.18 L 170 126.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 170 121.12 L 173.5 128.12 L 170 126.37 L 166.5 128.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="0" y="160" width="120" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 180px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px ; white-space: pre"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><span>ACCESS-ADMINS</span></div></div></div></div></div></div></foreignObject><text x="60" y="184" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">ACCESS-ADMINS</text></switch></g><path d="M 200 160 L 200 126.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 200 121.12 L 203.5 128.12 L 200 126.37 L 196.5 128.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="140" y="160" width="120" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 180px; margin-left: 141px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px ; white-space: pre"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><span>DDL-ADMINS</span></div></div></div></div></div></div></div></foreignObject><text x="200" y="184" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DDL-ADMINS</text></switch></g><path d="M 360 80 L 360 70 Q 360 60 350 60 L 210 60 Q 200 60 200 53.18 L 200 46.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 200 41.12 L 203.5 48.12 L 200 46.37 L 196.5 48.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="300" y="80" width="120" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 100px; margin-left: 301px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px ; white-space: pre"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><span>DATA-WRITERS</span></div></div></div></div></div></div></div></foreignObject><text x="360" y="104" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DATA-WRITERS</text></switch></g><path d="M 360 160 L 360 126.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 360 121.12 L 363.5 128.12 L 360 126.37 L 356.5 128.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="300" y="160" width="120" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 180px; margin-left: 301px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px ; white-space: pre"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><span>DATA-READERS</span></div></div></div></div></div></div></div></foreignObject><text x="360" y="184" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DATA-READERS</text></switch></g><path d="M 360 240 L 360 206.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 360 201.12 L 363.5 208.12 L 360 206.37 L 356.5 208.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 360 240 L 360 230 Q 360 220 350 220 L 240 220 Q 230 220 230 213.18 L 230 206.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 230 201.12 L 233.5 208.12 L 230 206.37 L 226.5 208.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="300" y="240" width="120" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 260px; margin-left: 301px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px ; white-space: pre"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><span>METADATA-READERS</span></div></div></div></div></div></div></div></foreignObject><text x="360" y="264" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">METADATA-READERS</text></switch></g><path d="M 200 320 L 200 206.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 200 201.12 L 203.5 208.12 L 200 206.37 L 196.5 208.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 200 320 L 200 310 Q 200 300 210 300 L 350 300 Q 360 300 360 293.18 L 360 286.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 360 281.12 L 363.5 288.12 L 360 286.37 L 356.5 288.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 200 320 L 200 270 Q 200 260 190 260 L 70 260 Q 60 260 60 250 L 60 206.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 60 201.12 L 63.5 208.12 L 60 206.37 L 56.5 208.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="140" y="320" width="120" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 340px; margin-left: 141px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px ; white-space: pre"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><div style="font-family: "menlo" , "monaco" , "courier new" , monospace ; line-height: 18px"><span>USERS</span></div></div></div></div></div></div></div></foreignObject><text x="200" y="344" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">USERS</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file diff --git a/ydb/docs/ru/core/cluster/access.md b/ydb/docs/ru/core/cluster/access.md new file mode 100644 index 00000000000..35861aacd2b --- /dev/null +++ b/ydb/docs/ru/core/cluster/access.md @@ -0,0 +1,40 @@ +# Управление доступом + +{{ ydb-short-name }} поддерживает аутентификацию по логину паролю. Подробнее читайте в разделе [{#T}](../concepts/auth.md). + +## Встроенные группы {#builtin} + +Кластер {{ ydb-short-name }} имеет встроенные группы, предоставляющие заранее определенные наборы ролей: + +Группа | Описание +--- | --- +`ADMINS` | Неограниченные права на всю схему кластера. +`DATABASE-ADMINS` | Права на создание и удаление баз данных (`CreateDatabase`, `DropDatabase`). +`ACCESS-ADMINS` | Права на управление правами других пользователей (`GrantAccessRights`). +`DDL-ADMINS` | Права на изменение схемы баз данных (`CreateDirectory`, `CreateTable`, `WriteAttributes`, `AlterSchema`, `RemoveSchema`). +`DATA-WRITERS` | Права на изменение данных (`UpdateRow`, `EraseRow`). +`DATA-READERS` | Права на чтение данных (`SelectRow`). +`METADATA-READERS` | Права на чтение метаинформации, без доступа к данным (`DescribeSchema` и `ReadAttributes`). +`USERS` | Права на подключение к базам данных (`ConnectDatabase`). + +Все пользователи по умолчанию входят в группу `USERS`. Пользователь `root` по умолчанию входит в группу `ADMINS`. + +Ниже показано, как группы наследуют разрешения друг друга. Например, в `DATA_WRITERS` входят все разрешения `DATA_READERS`: + + + +## Управление группами {#groups} + +Для создания, изменения или удаления группы воспользуйтесь операторами YQL: + +* [{#T}](../yql/reference/syntax/create-group.md). +* [{#T}](../yql/reference/syntax/alter-group.md). +* [{#T}](../yql/reference/syntax/drop-group.md). + +## Управление пользователями {#users} + +Для создания, изменения или удаления пользователя воспользуйтесь операторами YQL: + +* [{#T}](../yql/reference/syntax/create-user.md). +* [{#T}](../yql/reference/syntax/alter-user.md). +* [{#T}](../yql/reference/syntax/drop-user.md). diff --git a/ydb/docs/ru/core/cluster/toc_i.yaml b/ydb/docs/ru/core/cluster/toc_i.yaml index b2ade5eb578..ed0c1f762ac 100644 --- a/ydb/docs/ru/core/cluster/toc_i.yaml +++ b/ydb/docs/ru/core/cluster/toc_i.yaml @@ -1,6 +1,8 @@ items: - name: Развертывание include: { mode: link, path: ../deploy/toc_p.yaml } +- name: Управление доступом + href: access.md - name: Обслуживание дисковой подсистемы кластера include: { mode: link, path: ../maintenance/manual/toc_p.yaml } - name: Встроенный UI diff --git a/ydb/docs/ru/core/concepts/_includes/connect.md b/ydb/docs/ru/core/concepts/_includes/connect.md deleted file mode 100644 index 45fcc4bde55..00000000000 --- a/ydb/docs/ru/core/concepts/_includes/connect.md +++ /dev/null @@ -1,105 +0,0 @@ -# Соединение с базой данных - -{% include [overlay/ui.md](connect_overlay/ui.md) %} - -Для соединения с БД {{ ydb-short-name }} из {{ ydb-short-name }} CLI или приложения, использующего {{ ydb-short-name }} SDK, вам потребуется предоставить следующие данные: - -1. Эндпоинт. -1. Аутентификационная информация. -1. Путь базы данных. - -## Эндпоинт {#endpoint} - -Эндпоинт (endpoint) - строка в формате `protocol://host:port`, предоставляемая владельцем кластера {{ ydb-short-name }} для корректной маршрутизации запросов клиента к его базам данных через сетевую инфраструктуру и установки сетевого соединения. Для облачных баз данных endpoint показывается в консоли управления на странице требуемой БД, а также обычно может быть получен через CLI облачного поставщика. В корпоративных окружениях имена эндпоинтов {{ ydb-short-name }} предоставляются командой администраторов или также могут быть получены в консоли управления внутренним облаком. - -{% include [overlay/endpoint.md](connect_overlay/endpoint.md) %} - -Примеры: - -* `grpc://localhost:7135` — протокол обмена данными без шифрования (gRPC), сервер запущен на том же хосте что и клиент, принимает соединения на порту 7135. -* `grpcs://ydb.somecorp-int.ru` — протокол обмена данными с шифрованием (gRPCs), сервер запущен на хосте ydb.somecorp-int.ru в изолированной корпоративной интрасети компании «SomeCorp», принимает соединения на порту YDB по умолчанию 2135. -* `grpcs://ydb.serverless.yandexcloud.net:2135` — протокол обмена данными с шифрованием (gRPCs), публичный сервер Serverless YDB {{ yandex-cloud }} ydb.serverless.yandexcloud.net, порт 2135. - -{% include [overlay/endpoint_example.md](connect_overlay/endpoint_example.md) %} - -## Аутентификационная информация {#auth} - -После успешной установки сетевого соединения сервер принимает к обработке запросы от клиента, в которых передается аутентификационная информация. На ее основании сервер определяет учетную запись (аккаунт) клиента и проверяет доступ на выполнение запроса. - -Основная схема работы предполагает наличие отдельной системы управления учетными данными и доступами - [IAM (Identity and Access Management)](https://en.wikipedia.org/wiki/Identity_management). IAM выдает привязанный к учетной записи токен, который передается клиентом {{ ydb-short-name }} на сервер вместе с запросом. Сервер {{ ydb-short-name }} обращается к IAM для проверки токена и доступа на выполнение запрошенной операции и кеширует результат. - -Также {{ ydb-short-name }} поддерживает аутентификацию по логину и паролю без взаимодействий с IAM, но практическое применение такой схемы ограничено простыми конфигурациями, в первую очередь локальными. - -### Режимы аутентификации {#auth-modes} - -Клиент {{ ydb-short-name }} (CLI или SDK) поддерживают следующие режимы выбора токена для передачи в запросах: - -* **Anonymous** — в запросах передается пустой токен. -* **Access Token** — параметром для клиента (SDK или CLI) задается фиксированный токен, который передается в запросы. -* **Refresh Token** — параметром для клиента (SDK или CLI) задается [OAuth токен](https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/) персональной учетной записи, на основании которого клиент периодически в фоновом режиме обращается к IAM API для ротации (получения следующего) токена, передаваемого в запросы. -* **Service Account Key** — параметром для клиента (SDK или CLI) задаются атрибуты сервисной учетной записи и ключ для подписи, на основании которых клиент периодически в фоновом режиме обращается к IAM API для ротации (получения следующего) токена, передаваемого в запросы. -* **Metadata** — клиент (SDK или CLI) периодически обращается к локальному сервису для ротации (получения следующего) токена, передаваемого в запросы. - -Любой обладатель валидного токена может получить доступ на выполнение операций, поэтому главная задача системы безопасности — обеспечение секретности токена и предотвращение его компрометации. - -Режимы аутентификации с ротацией токена **Refresh Token** и **Service Account Key** обеспечивают больший уровень безопасности по сравнению с режимом с фиксированным токеном **Access Token**, так как на сервер {{ ydb-short-name }} по сети передаются только короткоживущие секреты. - -Максимальная безопасность и производительность обеспечивается при использовании режима **Metadata**, так как он исключает необходимость работы с секретами при развертывании приложения, а также позволяет обратиться к IAM и закешировать токен заранее, до запуска приложения. - -При выборе режима аутентификации среди поддерживаемых сервером и окружением, следует руководствоваться следующими рекомендациями: - -* **Anonymous** обычно применяется на самостоятельно разворачиваемых локальных кластерах {{ ydb-short-name }}, недоступных по сети. -* **Access Token** применяется при отсутствии поддержки других режимов на стороне сервера или в настроечных/отладочных целях. Он не требует взаимодействий клиента с IAM. Однако, если IAM поддерживает API для ротации токенов, то обычно выдаваемые таким IAM фиксированные токены имеют короткий срок жизни, что вынуждает регулярно обновлять их в IAM вручную заново. -* **Refresh Token** может применяться при выполнении разовых ручных операций под персональной учетной записью, например, связанных с обслуживанием данных в БД, выполнением ad-hoc операций в CLI, или запусками приложений с рабочей станции. Такой токен можно получить вручную в IAM один раз на долгий срок и сохранить в переменной окружения на личной рабочей станции для автоматического применения при запуске CLI без дополнительных параметров аутентификации. -* **Service Account Key** применяется в первую очередь для приложений, рассчитанных на эксплуатацию в окружениях, где поддерживается режим **Metadata**, при их тестировании вне таких окружений (например, на рабочей станции). Также он может применяться для приложений вне таких окружений, работая как аналог **Refresh Token** для сервисных учетных записей. В отличие от персональной учетной записи, объекты доступа и роли сервисной учетной записи могут быть ограничены. -* **Metadata** применяется при разворачивании приложений в облаках. В настоящее время этот режим поддерживается на виртуальных машинах и в {{ sf-name }} {{ yandex-cloud }}. - -Токен для указания в параметрах может быть получен в системе IAM, с которой связана конкретная установка {{ ydb-short-name }}. В частности, для сервиса {{ ydb-short-name }} в {{ yandex-cloud }} применяется Yandex.Passport OAuth и сервисные аккаунты {{ yandex-cloud }}. При использовании {{ ydb-short-name }} в корпоративных контекстах могут применяться стандартные для данной организации системы централизованной аутентификации. - -{% include [overlay/auth_choose.md](connect_overlay/auth_choose.md) %} - -При использовании режимов, предусматривающих обращение клиента {{ ydb-short-name }} к IAM, дополнительно может быть задан URL IAM, предоставляющий API выдачи токенов. По умолчанию в существующих SDK и CLI производится попытка обращения к API IAM {{ yandex-cloud }}, размещенному на `iam.api.cloud.yandex.net:443`. - -## Путь базы данных {#database} - -Путь базы данных (`database`) - строка, определяющая где на кластере {{ ydb-short-name }} находится база данных, к которой адресован запрос. Имеет структуру [пути к файлу]{% if lang == "en" %}(https://en.wikipedia.org/wiki/Path_(computing)){% endif %}{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Путь_к_файлу){% endif %}, с использованием символа `/` в качестве разделителя. Начинается всегда с символа `/`. - -На кластере {{ ydb-short-name }} может быть развернуто множество баз данных, и их пути определяются конфигурацией кластера. Как и эндпоинт, для облачных баз данных `database` показывается в консоли управления на странице требуемой БД, а также обычно может быть получен через CLI облачного поставщика. - -При использовании облачных решений базы данных на кластере {{ ydb-short-name }} создаются и размещаются в режиме самообслуживания, не требуя участия владельца и администраторов кластера. - -{% include [overlay/database.md](connect_overlay/database.md) %} - -{% note warning %} - -Приложения не должны как-либо интерпретировать количество и значение каталогов в `database`, так как они определяются конфигурацией кластера {{ ydb-short-name }}. Например, при работе с сервисом {{ ydb-short-name }} в {{ yandex-cloud }} `database` сейчас имеет структуру `region_name/cloud_id/database_id`, однако этот формат может быть изменен в будущем для новых БД. - -{% endnote %} - -Примеры: - -* `/ru-central1/b1g8skpblkos03malf3s/etn01q5ko6sh271beftr` — база данных {{ yandex-cloud }} с идентификатором `etn01q3ko8sh271beftr` в облаке `b1g8skpbljhs03malf3s`, развернутая в регионе `ru-central1`. -* `/local` — база данных по умолчанию при самостоятельном развертывании [с использованием Docker](../../getting_started/self_hosted/ydb_docker.md). - -{% include [overlay/database_example.md](connect_overlay/database_example.md) %} - -## Конфигурация параметров соединения на клиенте {#client-config} - -В специализированных статьях описано, как определять параметры соединения на клиенте: - -* [Соединение с БД и аутентификация в {{ ydb-short-name }} CLI](../../reference/ydb-cli/connect.md). -* [Аутентификация в {{ ydb-short-name }} SDK](../../reference/ydb-sdk/auth.md). - -## Дополнительная информация {#addition} - -### Корневой сертификат для TLS {#tls-cert} - -При использовании протокола с шифрованием ([gRPC over TLS](https://grpc.io/docs/guides/auth/), или grpcs) продолжение сетевого соединения возможно только в том случае, если клиент уверен в том, что ему действительно отвечает подлинный сервер, с которым он пытается установить соединение, а не кто-то посередине, перехвативший запрос в сети. Это обеспечивается проверкой через [цепочки доверия]{% if lang == "en" %}(https://en.wikipedia.org/wiki/Chain_of_trust){% endif %}{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Цепочка_доверия){% endif %}, для работы которой на клиенте должен быть установлен т.н. корневой сертификат. - -В состав операционных систем, на которых запускается клиент, уже входит набор корневых сертификатов от основных мировых центров сертификации. Однако, владелец кластера {{ ydb-short-name }} может использовать свой центр сертификации, не связанный ни с одним из мировых, что часто встречается в корпоративных окружениях, и почти всегда применяется при самостоятельном развертывании кластеров с поддержкой шифрования на соединениях. В этом случае владелец кластера должен каким-либо образом передать свой корневой сертификат для использования на стороне клиента. Такой сертификат может быть установлен в хранилище сертификатов операционной системы, где запускается клиент (вручную пользователем или корпоративной командой администраторов ОС), или встроен в состав самого клиента (как это сделано для {{ yandex-cloud }} в {{ ydb-short-name }} CLI и SDK). - -### API получения токенов IAM {#token-refresh-api} - -Для ротации токенов {{ ydb-short-name }} SDK и CLI используют gRPC-запрос к {{ yandex-cloud }} IAM API [IamToken - create]{% if lang == "en" %}(https://cloud.yandex.com/en/docs/iam/api-ref/grpc/iam_token_service#Create){% endif %}{% if lang == "ru" %}(https://cloud.yandex.ru/docs/iam/api-ref/grpc/iam_token_service#Create){% endif %}. В режиме **Refresh Token** заданный параметром OAuth токен передается в атрибуте `yandex_passport_oauth_token`. В режиме **Service Account Key** на основании заданных атрибутов сервисной учетной записи и ключа шифрования формируется короткоживущий JWT-токен и передается в атрибуте `jwt`. Исходный код формирования JWT-токена доступен в составе SDK (например, метод `get_jwt()` в [коде на Python](https://github.com/ydb-platform/ydb-python-sdk/blob/main/ydb/iam/auth.py)). - -{{ ydb-short-name }} SDK и CLI позволяют подменить хост для обращения к API получения токенов, что дает возможность реализовать аналогичный API в корпоративных контекстах. diff --git a/ydb/docs/ru/core/concepts/auth.md b/ydb/docs/ru/core/concepts/auth.md new file mode 100644 index 00000000000..6f8b229d5ae --- /dev/null +++ b/ydb/docs/ru/core/concepts/auth.md @@ -0,0 +1,37 @@ +# Аутентификация + +После успешной установки сетевого соединения сервер принимает к обработке запросы от клиента, в которых передается аутентификационная информация. На ее основании сервер определяет учетную запись (аккаунт) клиента и проверяет доступ на выполнение запроса. + +Поддерживаются следующие режимы аутентификации: + +* Анонимный доступ — включен по умолчанию и доступен сразу после [установки кластера](../deploy/index.md). +* Аутентификация с использованием стороннего IAM-провайдера, например [Yandex Identity and Access Management](https://cloud.yandex.ru/docs/iam/). +* Аутентификация по [логину и паролю](#static-credentions). + +{% include [overlay/auth_choose.md](_includes/connect_overlay/auth_choose.md) %} + +## Аутентификация по логину и паролю {#static-credentions} + +Процесс аутентификации по логину и паролю включает следующие шаги: + +1. Клиент обращается к БД и передает логин и пароль пользователя сервису аутентификации {{ ydb-short-name }}. + + Имя пользователя может содержать только строчные буквы латинского алфавита и цифры. Требования к паролю не предъявляются, пароль может быть пустым. +1. Сервис аутентификации передает аутентификационные данные в компонент аутентификации {{ ydb-short-name }}. +1. Компонент валидирует аутентификационные данные, при успешном сопоставлении создает токен и возвращает его сервису аутентификации. + + Использование токена ускоряет процесс аутентификации и повышает безопасность. Время жизни токена по умолчанию 12 часов. Для ротации токенов YDB SDK самостоятельно обращается к сервису аутентификации. + + Имя пользователя и хеш пароля хранятся в таблице внутри компонента аутентификации. Пароль хеширован методом [Argon2](https://ru.wikipedia.org/wiki/Argon2). В режиме аутентификации по логину и паролю доступ к таблице имеет только администратор системы. +1. Сервис аутентификации возвращает токен клиенту. +1. Клиент обращается к БД, передавая в качестве аутентификационной информации токен. + +Для включения аутентификации по логину и паролю укажите значение `true` для ключа `enforce_user_token_requirement` в [конфигурационном файле](../deploy/configuration/config.md#auth) кластера. + +Об управлении ролями и пользователями читайте в [{#T}](../cluster/access.md). + +<!-- ### API получения токенов IAM {#token-refresh-api} + +Для ротации токенов {{ ydb-short-name }} SDK и CLI используют gRPC-запрос к {{ yandex-cloud }} IAM API [IamToken - create]{% if lang == "en" %}(https://cloud.yandex.com/en/docs/iam/api-ref/grpc/iam_token_service#Create){% endif %}{% if lang == "ru" %}(https://cloud.yandex.ru/docs/iam/api-ref/grpc/iam_token_service#Create){% endif %}. В режиме **Refresh Token** заданный параметром OAuth токен передается в атрибуте `yandex_passport_oauth_token`. В режиме **Service Account Key** на основании заданных атрибутов сервисной учетной записи и ключа шифрования формируется короткоживущий JWT-токен и передается в атрибуте `jwt`. Исходный код формирования JWT-токена доступен в составе SDK (например, метод `get_jwt()` в [коде на Python](https://github.com/ydb-platform/ydb-python-sdk/blob/main/ydb/iam/auth.py)). + +{{ ydb-short-name }} SDK и CLI позволяют подменить хост для обращения к API получения токенов, что дает возможность реализовать аналогичный API в корпоративных контекстах. --> diff --git a/ydb/docs/ru/core/concepts/connect.md b/ydb/docs/ru/core/concepts/connect.md index c0cae8a17ba..5a23dfd9992 100644 --- a/ydb/docs/ru/core/concepts/connect.md +++ b/ydb/docs/ru/core/concepts/connect.md @@ -1,2 +1,42 @@ +# Соединение с БД -{% include [connect.md](_includes/connect.md) %} +Для соединения с БД {{ ydb-short-name }} из {{ ydb-short-name }} CLI или приложения, использующего {{ ydb-short-name }} SDK, необходимо указать [эндпоинт](#endpoint) и [путь базы данных](#database). + +## Эндпоинт {#endpoint} + +Эндпоинт (endpoint) - строка в формате `protocol://host:port`, предоставляемая владельцем кластера {{ ydb-short-name }} для корректной маршрутизации запросов клиента к его базам данных через сетевую инфраструктуру и установки сетевого соединения. Для облачных баз данных endpoint показывается в консоли управления на странице требуемой БД, а также обычно может быть получен через CLI облачного поставщика. В корпоративных окружениях имена эндпоинтов {{ ydb-short-name }} предоставляются командой администраторов или также могут быть получены в консоли управления внутренним облаком. + +{% include [overlay/endpoint.md](_includes/connect_overlay/endpoint.md) %} + +Примеры: + +* `grpc://localhost:7135` — протокол обмена данными без шифрования (gRPC), сервер запущен на том же хосте что и клиент, принимает соединения на порту 7135. +* `grpcs://ydb.example.com` — протокол обмена данными с шифрованием (gRPCs), сервер запущен на хосте ydb.example.com в изолированной корпоративной интрасети, принимает соединения на порту YDB по умолчанию 2135. +* `grpcs://ydb.serverless.yandexcloud.net:2135` — протокол обмена данными с шифрованием (gRPCs), публичный сервер Serverless YDB {{ yandex-cloud }} ydb.serverless.yandexcloud.net, порт 2135. + +## Путь базы данных {#database} + +Путь базы данных (`database`) - строка, определяющая где на кластере {{ ydb-short-name }} находится база данных, к которой адресован запрос. Имеет структуру [пути к файлу]{% if lang == "en" %}(https://en.wikipedia.org/wiki/Path_(computing)){% endif %}{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Путь_к_файлу){% endif %}, с использованием символа `/` в качестве разделителя. Начинается всегда с символа `/`. + +На кластере {{ ydb-short-name }} может быть развернуто множество баз данных, и их пути определяются конфигурацией кластера. Как и эндпоинт, для облачных баз данных `database` показывается в консоли управления на странице требуемой БД, а также обычно может быть получен через CLI облачного поставщика. + +При использовании облачных решений базы данных на кластере {{ ydb-short-name }} создаются и размещаются в режиме самообслуживания, не требуя участия владельца и администраторов кластера. + +{% include [overlay/database.md](_includes/connect_overlay/database.md) %} + +{% note warning %} + +Приложения не должны как-либо интерпретировать количество и значение каталогов в `database`, так как они определяются конфигурацией кластера {{ ydb-short-name }}. Например, при работе с сервисом {{ ydb-short-name }} в {{ yandex-cloud }} `database` сейчас имеет структуру `region_name/cloud_id/database_id`, однако этот формат может быть изменен в будущем для новых БД. + +{% endnote %} + +Примеры: + +* `/ru-central1/b1g8skpblkos03malf3s/etn01q5ko6sh271beftr` — база данных {{ yandex-cloud }} с идентификатором `etn01q3ko8sh271beftr` в облаке `b1g8skpbljhs03malf3s`, развернутая в регионе `ru-central1`. +* `/local` — база данных по умолчанию при самостоятельном развертывании [с использованием Docker](../getting_started/self_hosted/ydb_docker.md). + +## Корневой сертификат для TLS {#tls-cert} + +При использовании протокола с шифрованием ([gRPC over TLS](https://grpc.io/docs/guides/auth/), или grpcs) продолжение сетевого соединения возможно только в том случае, если клиент уверен в том, что ему действительно отвечает подлинный сервер, с которым он пытается установить соединение, а не кто-то посередине, перехвативший запрос в сети. Это обеспечивается проверкой через [цепочки доверия]{% if lang == "en" %}(https://en.wikipedia.org/wiki/Chain_of_trust){% endif %}{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Цепочка_доверия){% endif %}, для работы которой на клиенте должен быть установлен т.н. корневой сертификат. + +В состав операционных систем, на которых запускается клиент, уже входит набор корневых сертификатов от основных мировых центров сертификации. Однако, владелец кластера {{ ydb-short-name }} может использовать свой центр сертификации, не связанный ни с одним из мировых, что часто встречается в корпоративных окружениях, и почти всегда применяется при самостоятельном развертывании кластеров с поддержкой шифрования на соединениях. В этом случае владелец кластера должен каким-либо образом передать свой корневой сертификат для использования на стороне клиента. Такой сертификат может быть установлен в хранилище сертификатов операционной системы, где запускается клиент (вручную пользователем или корпоративной командой администраторов ОС), или встроен в состав самого клиента (как это сделано для {{ yandex-cloud }} в {{ ydb-short-name }} CLI и SDK). diff --git a/ydb/docs/ru/core/concepts/toc_i.yaml b/ydb/docs/ru/core/concepts/toc_i.yaml index d5799ce1bd5..8ac9dac2cf5 100644 --- a/ydb/docs/ru/core/concepts/toc_i.yaml +++ b/ydb/docs/ru/core/concepts/toc_i.yaml @@ -1,7 +1,9 @@ items: - { name: Обзор, href: index.md } - { name: Термины и определения, href: databases.md } -- { name: Соединение с БД и аутентификация, href: connect.md } +- { name: Соединение с БД, href: connect.md } +- name: Аутентификация + href: auth.md - name: Модель данных и схема include: { path: datamodel/toc_p.yaml, mode: link } - { name: Режимы работы Serverless и Dedicated, href: serverless_and_dedicated.md } diff --git a/ydb/docs/ru/core/deploy/configuration/config.md b/ydb/docs/ru/core/deploy/configuration/config.md index f8425568333..2ce92dbae3e 100644 --- a/ydb/docs/ru/core/deploy/configuration/config.md +++ b/ydb/docs/ru/core/deploy/configuration/config.md @@ -125,15 +125,17 @@ hosts: ## domains_config - Домен кластера {#domains-config} -Данный раздел содержит конфигурацию корневого домена кластера YDB, включая конфигурации Blob Storage (хранилища бинарных объектов) и State Storage (хранилища состояний). +Данный раздел содержит конфигурацию корневого домена кластера YDB, включая [конфигурации Blob Storage](#domains-blob) (хранилища бинарных объектов), [State Storage](#domains-state) (хранилища состояний) и [аутентификации](#auth). **Синтаксис** + ``` yaml domains_config: domain: - name: <имя корневого домена> storage_pool_types: <конфигурация Blob Storage> state_storage: <конфигурация State Storage> + security_config: <конфигурация аутентификации> ``` ### Конфигурация Blob Storage {#domains-blob} @@ -205,6 +207,24 @@ state_storage: Для `nto_select` должны использоваться нечетные числа, так как использование четных чисел не улучшает отказоустойчивость по сравнению с ближайшим меньшим нечетным числом. +### Конфигурация аутентификации {#auth} + +[Режим аутентификации](../../concepts/auth.md) на кластере {{ ydb-short-name }} задается в разделе `domains_config.security_config`. + +Синтаксис: + +``` yaml +domains_config: + ... + security_config: + enforce_user_token_requirement: Bool + ... +``` + +Ключ | Описание +--- | --- +`enforce_user_token_requirement` | Требовать токен пользователя.</br>Допустимые значения:</br><ul><li>`false` — режим аутентификации анонимный, токен не требуется;</li><li>`true` — режим аутентификации по логину и паролю, для выполнения запроса требуется валидный токен пользователя.</li></ul> + ### Примеры {#domains-examples} {% list tabs %} diff --git a/ydb/docs/ru/core/getting_started/_includes/auth.md b/ydb/docs/ru/core/getting_started/_includes/auth.md index 9141f7fc80a..ef2bc74c203 100644 --- a/ydb/docs/ru/core/getting_started/_includes/auth.md +++ b/ydb/docs/ru/core/getting_started/_includes/auth.md @@ -1,6 +1,6 @@ # Аутентификация - Начало работы -Разворачиваемая сценариями самостоятельного развертывания локальная база данных YDB не требует аутентификации, то есть работает в [анонимном режиме](../../concepts/connect.md#auth-modes). +Разворачиваемая сценариями самостоятельного развертывания локальная база данных YDB не требует аутентификации, то есть работает в [анонимном режиме](../../concepts/auth.md). Полная информация о всех доступных способах аутентификации приведена в статье [Соединение с базой данных](../../concepts/connect.md) в разделе Концепции. diff --git a/ydb/docs/ru/core/getting_started/self_hosted/_includes/ydb_docker/01_intro.md b/ydb/docs/ru/core/getting_started/self_hosted/_includes/ydb_docker/01_intro.md index 0448289c857..07a342619c2 100644 --- a/ydb/docs/ru/core/getting_started/self_hosted/_includes/ydb_docker/01_intro.md +++ b/ydb/docs/ru/core/getting_started/self_hosted/_includes/ydb_docker/01_intro.md @@ -12,12 +12,12 @@ - [Эндпоинт](../../../../concepts/connect.md#endpoint): `grpc://localhost:2136` - [Путь базы данных](../../../../concepts/connect.md#database): `/local` - - [Аутентификация](../../../../concepts/connect.md#auth-modes): Анонимная (без аутентификации) + - [Аутентификация](../../../../concepts/auth.md): Анонимная (без аутентификации) - gRPCs/TLS - [Эндпоинт](../../../../concepts/connect.md#endpoint): `grpcs://localhost:2135` - [Путь базы данных](../../../../concepts/connect.md#database): `/local` - - [Аутентификация](../../../../concepts/connect.md#auth-modes): Анонимная (без аутентификации) + - [Аутентификация](../../../../concepts/auth.md): Анонимная (без аутентификации) {% endlist %} diff --git a/ydb/docs/ru/core/getting_started/self_hosted/_includes/ydb_local.md b/ydb/docs/ru/core/getting_started/self_hosted/_includes/ydb_local.md index 7a48650ab87..012f252abae 100644 --- a/ydb/docs/ru/core/getting_started/self_hosted/_includes/ydb_local.md +++ b/ydb/docs/ru/core/getting_started/self_hosted/_includes/ydb_local.md @@ -8,7 +8,7 @@ - [Эндпоинт](../../../concepts/connect.md#endpoint): `grpc://localhost:2136` - [Путь базы данных](../../../concepts/connect.md#database): `/Root/test` -- [Аутентификация](../../../concepts/connect.md#auth-modes): Анонимная (без аутентификации) +- [Аутентификация](../../../concepts/auth.md): Анонимная (без аутентификации) ## Установка {#install} diff --git a/ydb/docs/ru/core/reference/ydb-cli/_includes/connect.md b/ydb/docs/ru/core/reference/ydb-cli/_includes/connect.md index ccae8c378e6..bec65700fab 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/_includes/connect.md +++ b/ydb/docs/ru/core/reference/ydb-cli/_includes/connect.md @@ -2,7 +2,7 @@ Большинство команд {{ ydb-short-name }} CLI относится к операциям над базой данных {{ ydb-short-name }} и требует соединения с ней для исполнения. -{{ ydb-short-name }} CLI определяет, с какой БД необходимо соединиться и какой [режим аутентификации](../../../concepts/connect.md#auth-modes) использовать из следующих источников (в порядке убывания приоритета): +{{ ydb-short-name }} CLI определяет, с какой БД необходимо соединиться и какой [режим аутентификации](../../../concepts/auth.md) использовать из следующих источников (в порядке убывания приоритета): 1. Командной строки 2. Профиля, выбранного опцией командной строки `--profile` diff --git a/ydb/docs/ru/core/reference/ydb-cli/profile/_includes/create.md b/ydb/docs/ru/core/reference/ydb-cli/profile/_includes/create.md index dfd9095c516..cafaa17530e 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/profile/_includes/create.md +++ b/ydb/docs/ru/core/reference/ydb-cli/profile/_includes/create.md @@ -95,7 +95,7 @@ Если вы не уверены какой режим аутентификации выбрать, воспользуйтесь рецептом из статьи [Аутентификация](../../../../getting_started/auth.md) в разделе "Начало работы". - Все доступные методы аутентификации описаны в статье [Соединение с БД и аутентификация](../../../../concepts/connect.md#auth-modes). Набор методов и текст подсказок может отличаться от приведенного в данном примере. + Все доступные методы аутентификации описаны в статье [{#T}](../../../../concepts/auth.md). Набор методов и текст подсказок может отличаться от приведенного в данном примере. Если выбранный вами метод подразумевает указание дополнительного параметра, вам будет предложено его ввести. Например, если вы выбрали `4` (Use service account key file): diff --git a/ydb/docs/ru/core/reference/ydb-sdk/_includes/auth.md b/ydb/docs/ru/core/reference/ydb-sdk/_includes/auth.md index c5c238a6f4f..2feccf74364 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/_includes/auth.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/_includes/auth.md @@ -1,10 +1,10 @@ # Аутентификация в SDK -Как описано в статье о [подключении к серверу {{ ydb-short-name }}](../../../concepts/connect.md), клиент с каждым запросом должен отправить [аутентификационный токен](../../../concepts/connect.md#auth). Аутентификационный токен проверяется сервером и, в случае успешной аутентификации, запрос авторизуется и выполняется, иначе возвращается ошибка `Unauthenticated`. +Как описано в статье о [подключении к серверу {{ ydb-short-name }}](../../../concepts/connect.md), клиент с каждым запросом должен отправить [аутентификационный токен](../../../concepts/auth.md). Аутентификационный токен проверяется сервером и, в случае успешной аутентификации, запрос авторизуется и выполняется, иначе возвращается ошибка `Unauthenticated`. {{ ydb-short-name }} SDK использует объект, отвечающий за генерацию таких токенов. SDK предоставляет встроенные cпособы получения такого объекта: -1. Методы с явной передачей параметров, каждый из методов реализует один из [режимов аутентификации](../../../concepts/connect.md#auth-modes). +1. Методы с явной передачей параметров, каждый из методов реализует один из [режимов аутентификации](../../../concepts/auth.md). 2. Метод определения режима аутентификации и необходимых параметров из переменных окружения. Обычно объект генерации токенов создается перед инициализацией драйвера {{ ydb-short-name }} и передается параметром в его конструктор. C++ и Go SDK дополнительно позволяют через один драйвер работать с несколькими БД и объектами генерации токенов. @@ -19,7 +19,7 @@ - Python - [Режим](../../../concepts/connect.md#auth-modes) | Метод + Режим | Метод ----- | ----- Anonymous | [`ydb.AnonymousCredentials()`](https://github.com/yandex-cloud/ydb-python-sdk/tree/master/examples/anonymous-credentials) Access Token | [`ydb.AccessTokenCredentials( token )`](https://github.com/yandex-cloud/ydb-python-sdk/tree/master/examples/access-token-credentials) @@ -29,7 +29,7 @@ - Go - [Режим](../../../concepts/connect.md#auth-modes) | Пакет | Метод + Режим | Пакет | Метод ----- | ----- | ---- Anonymous | [ydb-go-sdk/v3](https://github.com/ydb-platform/ydb-go-sdk/blob/master/go.mod) | [`ydb.WithAnonymousCredentials()`](https://github.com/ydb-platform/ydb-go-examples/tree/master/cmd/auth/anonymous_credentials) Access Token | [ydb-go-sdk/v3](https://github.com/ydb-platform/ydb-go-sdk/blob/master/go.mod) | [`ydb.WithAccessTokenCredentials( token )`](https://github.com/ydb-platform/ydb-go-examples/tree/master/cmd/auth/access_token_credentials) @@ -39,7 +39,7 @@ - Java - [Режим](../../../concepts/connect.md#auth-modes) | Метод + Режим | Метод ----- | ----- Anonymous | [`com.yandex.ydb.core.auth.NopAuthProvider.INSTANCE`](https://github.com/yandex-cloud/ydb-java-sdk/tree/master/examples/auth/anonymous_credentials) Access Token | [`com.yandex.ydb.auth.iam.CloudAuthProvider.newAuthProvider(`</br> `yandex.cloud.sdk.auth.provider.IamTokenCredentialProvider`</br> `.builder()`</br> `.token(accessToken)`</br> `.build()`</br>`);`](https://github.com/yandex-cloud/ydb-java-sdk/tree/master/examples/auth/access_token_credentials) @@ -49,7 +49,7 @@ - Node.js - [Режим](../../../concepts/connect.md#auth-modes) | Метод + Режим | Метод ----- | ----- Anonymous | [`new 'ydb-sdk'.AnonymousAuthService()`](https://github.com/ydb-platform/ydb-nodejs-sdk/tree/main/examples/auth/anonymous-credentials) Access Token | [`new 'ydb-sdk'.TokenAuthService( accessToken, database )`](https://github.com/ydb-platform/ydb-nodejs-sdk/tree/main/examples/auth/access-token-credentials) @@ -59,8 +59,8 @@ - Rust - [Режим](../../../concepts/connect.md#auth-modes) | Метод - ----- | ----- + Режим | Метод + ----- | ----- Anonymous | ydb::StaticToken("") Access Token | ydb::StaticToken(token) Metadata | ydb::GCEMetadata, ydb::YandexMetadata diff --git a/ydb/docs/ru/core/reference/ydb-sdk/example/go/_includes/run_custom.md b/ydb/docs/ru/core/reference/ydb-sdk/example/go/_includes/run_custom.md index bd254cb43fd..c7659b15542 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/example/go/_includes/run_custom.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/example/go/_includes/run_custom.md @@ -1,6 +1,6 @@ Для выполнения примера с использованием любой доступной базы данных YDB вам потребуется знать [эндпоинт](../../../../../concepts/connect.md#endpoint) и [путь базы данных](../../../../../concepts/connect.md#database). -Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../../concepts/connect.md#auth-modes) и получить секреты - токен или логин/пароль. +Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../../concepts/auth.md) и получить секреты - токен или логин/пароль. Выполните команду по следующему образцу: diff --git a/ydb/docs/ru/core/reference/ydb-sdk/example/java/_includes/run_custom.md b/ydb/docs/ru/core/reference/ydb-sdk/example/java/_includes/run_custom.md index 26b44ddf2db..f13482889c6 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/example/java/_includes/run_custom.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/example/java/_includes/run_custom.md @@ -1,6 +1,6 @@ Для выполнения примера с использованием любой доступной базы данных YDB вам потребуется знать [эндпоинт](../../../../../concepts/connect.md#endpoint) и [путь базы данных](../../../../../concepts/connect.md#database). -Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../../concepts/connect.md#auth-modes) и получить секреты - токен или логин/пароль. +Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../../concepts/auth.md) и получить секреты - токен или логин/пароль. Выполните команду по следующему образцу: diff --git a/ydb/docs/ru/core/reference/ydb-sdk/example/java/index.md b/ydb/docs/ru/core/reference/ydb-sdk/example/java/index.md index ea42ad5aadc..3a46fa0a687 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/example/java/index.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/example/java/index.md @@ -27,7 +27,7 @@ git clone https://github.com/yandex-cloud/ydb-java-sdk Основные параметры инициализации драйвера * Cтрока подключения с информацией об [эндпоинте](../../../../concepts/connect.md#endpoint) и [базе данных](../../../../concepts/connect.md#database). Единственный обязательный параметр. -* Провайдер [аутенфикации](../../auth.md##auth-provider). В случае отсутствия прямого указания будет использоваться [анонимное подключение](../../../../concepts/connect.md#auth-modes). +* Провайдер [аутенфикации](../../auth.md##auth-provider). В случае отсутствия прямого указания будет использоваться [анонимное подключение](../../../../concepts/auth.md). * Настройки [пула сессий](../../recipes/session_pool_limit/index.md) Фрагмент кода приложения для инициализации драйвера: diff --git a/ydb/docs/ru/core/reference/ydb-sdk/example/python/_includes/run_custom.md b/ydb/docs/ru/core/reference/ydb-sdk/example/python/_includes/run_custom.md index b592d46ad1f..6352f3f580d 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/example/python/_includes/run_custom.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/example/python/_includes/run_custom.md @@ -1,6 +1,6 @@ Для выполнения примера с использованием любой доступной базы данных YDB вам потребуется знать [эндпоинт](../../../../../concepts/connect.md#endpoint) и [путь базы данных](../../../../../concepts/connect.md#database). -Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../../concepts/connect.md#auth-modes) и получить секреты - токен или логин/пароль. +Если в базе данных включена аутентификация, то вам также понадобится выбрать [режим аутентификации](../../../../../concepts/auth.md) и получить секреты - токен или логин/пароль. Выполните команду по следующему образцу: diff --git a/ydb/docs/ru/core/reference/ydb-sdk/recipes/auth/_includes/static.md b/ydb/docs/ru/core/reference/ydb-sdk/recipes/auth/_includes/static.md deleted file mode 100644 index 4aa76e771df..00000000000 --- a/ydb/docs/ru/core/reference/ydb-sdk/recipes/auth/_includes/static.md +++ /dev/null @@ -1,9 +0,0 @@ -# Аутентификация при помощи логина и пароля - -{% include [work in progress message](../../_includes/addition.md) %} - -Ниже приведены примеры кода аутентификации при помощи логина и пароля в разных {{ ydb-short-name }} SDK. - -{% list tabs %} - -{% endlist %} diff --git a/ydb/docs/ru/core/reference/ydb-sdk/recipes/auth/static.md b/ydb/docs/ru/core/reference/ydb-sdk/recipes/auth/static.md index 6ee75b91869..4939dade65a 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/recipes/auth/static.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/recipes/auth/static.md @@ -1,2 +1,23 @@ +# Аутентификация при помощи логина и пароля -{% include [index.md](_includes/static.md) %} +{% include [work in progress message](../_includes/addition.md) %} + +Ниже приведены примеры кода аутентификации при помощи логина и пароля в разных {{ ydb-short-name }} SDK. + +{% list tabs %} + +- C++ + + ```c++ + auto driverConfig = NYdb::TDriverConfig() + .SetEndpoint(endpoint) + .SetDatabase(database) + .SetCredentialsProviderFactory(NYdb::CreateLoginCredentialsProviderFactory({ + .User = "user", + .Password = "password", + })); + + NYdb::TDriver driver(driverConfig); + ``` + +{% endlist %} diff --git a/ydb/docs/ru/core/toc_i.yaml b/ydb/docs/ru/core/toc_i.yaml index a0dbc5d2fba..34c24b798cd 100644 --- a/ydb/docs/ru/core/toc_i.yaml +++ b/ydb/docs/ru/core/toc_i.yaml @@ -16,7 +16,6 @@ items: - { name: Управление базами данных, include: { mode: link, path: db/toc_p.yaml } } - { name: Управление кластером, include: { mode: link, path: cluster/toc_p.yaml } } - # References - { name: YQL, include: { mode: link, path: yql/toc_p.yaml } } - { name: Работа с YDB CLI, include: { mode: link, path: reference/ydb-cli/toc_p.yaml } } diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-group.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-group.md new file mode 100644 index 00000000000..e5c3b414efa --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-group.md @@ -0,0 +1,13 @@ +# ALTER GROUP + +Добавляет или удаляет группу указанному пользователю. Для одного оператора вы можете указать несколько пользователей. + +Синтаксис: + +```yql +ALTER GROUP role_name ADD USER user_name [, ... ] +ALTER GROUP role_name DROP USER user_name [, ... ] +``` + +* `role_name` — имя группы. +* `user_name` — имя пользователя. diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-user.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-user.md new file mode 100644 index 00000000000..a4e60c14c0c --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/alter-user.md @@ -0,0 +1,14 @@ +# ALTER USER + +Изменяет пароль пользователя. + +Синтаксис: + +```yql +ALTER USER user_name [ WITH ] option [ ... ] +``` + +* `user_name` — имя пользователя. +* `option` — пароль пользователя: + * `PASSWORD 'password'` — создает пользователя с паролем `password`. Опция `ENCRYPTED` всегда включена. + * `PASSWORD NULL` — создает пользователя с пустым паролем. diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/create-group.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/create-group.md new file mode 100644 index 00000000000..c0c86aa2375 --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/create-group.md @@ -0,0 +1,11 @@ +# CREATE GROUP + +Создает группу с указанным именем. + +Синтаксис: + +```yql +CREATE GROUP group_name +``` + +* `group_name` — имя группы. Может содержать строчные буквы латинского алфавита и цифры. diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/create-user.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/create-user.md new file mode 100644 index 00000000000..50a42023200 --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/create-user.md @@ -0,0 +1,14 @@ +# CREATE USER + +Создает пользователя с указанным именем и паролем. + +Синтаксис: + +```yql +CREATE USER user_name [option] +``` + +* `user_name` — имя пользователя. Может содержать строчные буквы латинского алфавита и цифры. +* `option` — пароль пользователя: + * `PASSWORD 'password'` — создает пользователя с паролем `password`. Опция `ENCRYPTED` всегда включена. + * `PASSWORD NULL` — создает пользователя с пустым паролем. diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/drop-group.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/drop-group.md new file mode 100644 index 00000000000..d27f6230e08 --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/drop-group.md @@ -0,0 +1,12 @@ +# DROP GROUP + +Удаляет указанную группу. Для одного оператора вы можете указать несколько групп. + +Синтаксис: + +```yql +DROP GROUP [ IF EXISTS ] group_name [, ...] +``` + +* `IF EXISTS` — не выводить ошибку, если группа не существует. +* `group_name` — имя группы, которого нужно удалить. diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/drop-user.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/drop-user.md new file mode 100644 index 00000000000..e2fe7270c8c --- /dev/null +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/drop-user.md @@ -0,0 +1,12 @@ +# DROP USER + +Удаляет указанного пользователя. Для одного оператора вы можете указать несколько пользователей. + +Синтаксис: + +```yql +DROP USER [ IF EXISTS ] user_name [, ...] +``` + +* `IF EXISTS` — не выводить ошибку, если пользователь не существует. +* `user_name` — имя пользователя, которого нужно удалить. diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/toc_i.yaml b/ydb/docs/ru/core/yql/reference/yql-core/syntax/toc_i.yaml index eb3d15839f6..69428ff88d8 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/toc_i.yaml +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/toc_i.yaml @@ -3,12 +3,18 @@ items: - { name: Лексическая структура, href: lexer.md } - { name: Выражения, href: expressions.md } - { name: ACTION, href: action.md } +- { name: ALTER GROUP, href: alter-group.md } - { name: ALTER TABLE, href: alter_table.md, when: feature_map_tables } +- { name: ALTER USER, href: alter-user.md } +- { name: CREATE GROUP, href: create-group.md } - { name: CREATE TABLE, href: create_table.md } +- { name: CREATE USER, href: create-user.md } - { name: DECLARE, href: declare.md } - { name: DELETE, href: delete.md, when: feature_map_tables } - { name: DISCARD, href: discard.md } +- { name: DROP GROUP, href: drop-group.md } - { name: DROP TABLE, href: drop_table.md } +- { name: DROP USER, href: drop-user.md } - { name: GROUP BY, href: group_by.md } - { name: EXPORT и IMPORT, href: export_import.md, when: feature_mapreduce } - { name: FLATTEN, href: flatten.md } |