Поделиться через


Сведения о проверке подлинности

Это важно

Автомасштабирование Lakebase находится в бета-версии в следующих регионах: eastus2, westeurope, westus.

Автомасштабирование Lakebase — это последняя версия Lakebase с автомасштабированием вычислений, масштабированием до нуля, ветвлением и мгновенным восстановлением. Сравнение функций с Lakebase Provisioned см. в разделе выбора между версиями.

Узнайте, как пройти проверку подлинности подключений к базе данных Lakebase Postgres. Пошаговые инструкции по подключению см. в кратком руководстве.

Обзор

Lakebase поддерживает два метода проверки подлинности, каждый из которых предназначен для различных вариантов использования:

Аутентификация токенов OAuth: Использует удостоверения Azure Databricks с временными токенами OAuth. Лучше всего:

  • Интерактивные сеансы, в которых можно обновить маркеры
  • Рабочие процессы, интегрированные с рабочей областью
  • Приложения, которые могут реализовать ротацию токенов
  • Когда требуется управление проверкой подлинности с помощью Azure Databricks

Собственная проверка подлинности паролей Postgres: Использует традиционные роли Postgres с паролями. Лучше всего:

  • Приложения, которые не могут обновлять учетные данные почасово
  • Длительные процессы
  • Средства, которые не поддерживают ротацию токенов

Замечание

Управление платформой и доступ к базе данных. Эта страница посвящена проверке подлинности базы данных (маркеры OAuth и пароли Postgres для подключения к базе данных). Проверка подлинности управления платформой (создание проектов, ветвей, вычислений) см. в разделе "Разрешения проекта".

Время ожидания подключения

Все подключения к базе данных применяются к следующим ограничениям независимо от метода проверки подлинности:

  • 24-часовое время ожидания простоя: Подключения без действия в течение 24 часов автоматически закрываются.
  • 3-дневное максимальное время подключения: Подключения, которые поддерживаются более 3 дней, могут быть закрыты, независимо от активности.

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

Аутентификация токена OAuth

Аутентификация с использованием токена OAuth позволяет подключаться с помощью учётной записи Azure Databricks. Вы создаете ограниченный по времени маркер OAuth из пользовательского интерфейса Lakebase и используете его в качестве пароля при подключении к Postgres.

Роль OAuth владельца проекта создается автоматически. Чтобы включить проверку подлинности OAuth для других удостоверений Azure Databricks, необходимо создать их роли Postgres с помощью расширения databricks_auth и SQL. См. Создание роли OAuth для идентификации БД с помощью SQL.

Как работают токены OAuth

  • Время существования токена: Срок действия маркеров OAuth истекает через один час.
  • Принудительное применение истечения срока действия: Истечение срока действия токена применяется только при входе. Открытые подключения остаются активными даже после истечения срока действия маркера.
  • Повторная проверка подлинности: Любой запрос Postgres или команда завершается ошибкой, если срок действия маркера истек.
  • Обновление маркера: Для интерактивных сеансов при необходимости создайте новый маркер из пользовательского интерфейса. Для приложений с длительными подключениями реализуйте ротацию токенов для автоматического обновления учетных данных.

Требования и ограничения

  • Соответствующая роль Postgres необходима: ваша учетная запись Azure Databricks должна обладать соответствующей ролью Postgres. Роль владельца проекта создается автоматически. Для других удостоверений Azure Databricks создайте свои роли с помощью databricks_auth расширения.
  • Ограничение по рабочей области: Маркеры OAuth имеют область действия, ограниченную рабочей областью, и должны принадлежать той же рабочей области, которая владеет проектом. Аутентификация токена между рабочими пространствами не поддерживается.
  • Требуется SSL: аутентификация на основе токенов требует SSL-подключений. Все клиенты должны быть настроены для использования SSL (обычно sslmode=require).

Получение маркера OAuth в потоке "пользователь — компьютер"

Если вы являетесь владельцем базы данных, администратором или ваша учетная запись Azure Databricks имеет соответствующую роль Postgres для этой базы данных, вы можете получить маркер OAuth из пользовательского интерфейса, API Databricks, CLI или из одного из SDK Databricks.

Для других пользователей Azure Databricks см. раздел "Авторизация доступа пользователей к Azure Databricks с помощью OAuth" для получения токенов OAuth на уровне рабочей области.

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

При использовании клиентов SQL, таких как psql или DBeaver, используйте пользовательский интерфейс Lakebase для создания маркеров:

  1. Перейдите к проекту в приложении Lakebase.
  2. Выберите ветвь и вычислительные ресурсы, к которым вы хотите подключиться.
  3. Нажмите кнопку Connect и следуйте инструкциям по созданию маркера OAuth.

Полные инструкции см. в разделе "Подключение с ролью OAuth".

интерфейс командной строки (CLI)

# Generate OAuth token for database connection (1-hour expiration)
databricks postgres generate-database-credential projects/my-project/branches/production/endpoints/my-compute --output json

Ответ.

{
  "token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...",
  "expire_time": "2026-01-22T17:07:00Z"
}

token Используйте значение в качестве пароля при подключении к базе данных.

Пакет SDK для Python

Вы можете создать токен OAuth с помощью пакета SDK Databricks для Python.

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

# Generate OAuth token for database connection (1-hour expiration)
credential = w.postgres.generate_database_credential(
    endpoint="projects/my-project/branches/production/endpoints/my-compute"
)

print(f"Token: {credential.token}")
print(f"Expires: {credential.expire_time}")

# Use the token to connect to Postgres
import psycopg2

conn = psycopg2.connect(
    host="ep-example.database.region.databricks.com",
    port=5432,
    database="postgres",
    user="your.email@company.com",
    password=credential.token,
    sslmode="require"
)

пакет SDK для Java

Вы можете создать токен OAuth с помощью пакета SDK Databricks для Java.

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;

WorkspaceClient w = new WorkspaceClient();

// Generate OAuth token for database connection (1-hour expiration)
DatabaseCredential credential = w.postgres().generateDatabaseCredential(
    new GenerateDatabaseCredentialRequest()
        .setEndpoint("projects/my-project/branches/production/endpoints/my-compute")
);

System.out.println("Token: " + credential.getToken());
System.out.println("Expires: " + credential.getExpireTime());

Получение токена OAuth в процессе авторизации между машинами

Чтобы обеспечить безопасный автоматизированный (машина-машина) доступ к базе данных, необходимо получить токен OAuth с помощью субъекта-службы Azure Databricks. Этот процесс включает настройку главного объекта службы, создание учетных данных и выпуск токенов OAuth для аутентификации.

  1. Настройте учетную запись службы с бессрочными учетными данными. Инструкции см. в статье "Авторизация доступа субъекта-службы к Azure Databricks с помощью OAuth".

  2. Выпустите новые токены OAuth в качестве учётной записи службы.

    интерфейс командной строки (CLI)

    # Generate OAuth token for database connection (1-hour expiration)
    databricks postgres generate-database-credential projects/my-project/branches/production/endpoints/my-compute --output json
    

    Ответ.

    {
      "token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...",
      "expire_time": "2026-01-22T17:07:00Z"
    }
    

    token Используйте значение в качестве пароля при подключении к базе данных.

    Пакет SDK для Python

    Вы можете создать токен OAuth с помощью пакета SDK Databricks для Python.

    from databricks.sdk import WorkspaceClient
    
    w = WorkspaceClient(
        host="https://<YOUR WORKSPACE URL>/",
        client_id="<YOUR SERVICE PRINCIPAL ID>",
        client_secret="REDACTED"
    )
    
    # Generate OAuth token for database connection (1-hour expiration)
    credential = w.postgres.generate_database_credential(
        endpoint="projects/my-project/branches/production/endpoints/my-compute"
    )
    
    print(f"Token: {credential.token}")
    print(f"Expires: {credential.expire_time}")
    

    пакет SDK для Java

    Вы можете создать токен OAuth с помощью пакета SDK Databricks для Java.

    import com.databricks.sdk.WorkspaceClient;
    import com.databricks.sdk.core.DatabricksConfig;
    import com.databricks.sdk.service.postgres.*;
    
    // Initialize with service principal credentials
    DatabricksConfig config = new DatabricksConfig()
        .setHost("https://<YOUR WORKSPACE URL>/")
        .setClientId("<YOUR SERVICE PRINCIPAL ID>")
        .setClientSecret("REDACTED");
    
    WorkspaceClient w = new WorkspaceClient(config);
    
    // Generate OAuth token for database connection (1-hour expiration)
    DatabaseCredential credential = w.postgres().generateDatabaseCredential(
        new GenerateDatabaseCredentialRequest()
            .setEndpoint("projects/my-project/branches/production/endpoints/my-compute")
    );
    
    System.out.println("Token: " + credential.getToken());
    System.out.println("Expires: " + credential.getExpireTime());
    

Замечание

Перед истечением почасового срока действия обновите токены OAuth.

  • Проверьте время окончания срока действия токена OAuth каждый раз и обновите при необходимости.
  • Кроме того, настройте фоновый поток для периодического обновления текущего маркера OAuth.

Примеры поворота маркеров

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

Замечание

Требования к этим примерам:

  • Необходимо пройти аутентификацию в рабочей области, владеющей проектом. Эта WorkspaceClient() использует учетные данные OAuth вашей рабочей области для генерации токенов базы данных.
  • Учетная запись Azure Databricks должна быть членом рабочей области, в которой был создан проект.
  • Получите параметры подключения (узел, база данных, конечная точка) из диалогового окна "Подключение " в приложении Lakebase. Подробности см. в Руководстве по быстрому старту.
  • Параметр endpoint использует формат: projects/{project-id}/branches/{branch-id}/endpoints/{endpoint-id}

Сведения о настройке проверки подлинности рабочей области см. в статье «Авторизация доступа пользователей к Azure Databricks с помощью OAuth» или «Авторизация доступа учетной записи службы к Azure Databricks с помощью OAuth».

Python: psycopg3

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

%pip install "psycopg[binary,pool]"
from databricks.sdk import WorkspaceClient

import psycopg
from psycopg_pool import ConnectionPool

w = WorkspaceClient()

class CustomConnection(psycopg.Connection):
    global w
    def __init__(self, *args, **kwargs):
        # Call the parent class constructor
        super().__init__(*args, **kwargs)

    @classmethod
    def connect(cls, conninfo='', **kwargs):
        # Generate a fresh OAuth token for each connection
        endpoint = "projects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>"
        credential = w.postgres.generate_database_credential(endpoint=endpoint)
        kwargs['password'] = credential.token

        # Call the superclass's connect method with updated kwargs
        return super().connect(conninfo, **kwargs)

# Configure connection parameters (get these from the Connect dialog in the LakeBase App)
username = "your.email@company.com"  # Your DB identity
host = "ep-example.database.region.databricks.com"  # Your compute endpoint hostname
port = 5432
database = "databricks_postgres"

# Create connection pool with custom connection class
pool = ConnectionPool(
    conninfo=f"dbname={database} user={username} host={host} sslmode=require",
    connection_class=CustomConnection,
    min_size=1,
    max_size=10,
    open=True
)

# Use the connection pool
with pool.connection() as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT version()")
        for record in cursor:
            print(record)

Python: SQLAlchemy

В этом примере используется пул подключений SQLAlchemy с прослушивателем событий, который автоматически обновляет маркер OAuth каждые 15 минут. Прослушиватель событий проверяет возраст токена перед каждым созданием нового подключения из пула, гарантируя, что приложение всегда имеет действительный токен без ручного вмешательства.

%pip install sqlalchemy==1.4 psycopg[binary]
from databricks.sdk import WorkspaceClient
import time

from sqlalchemy import create_engine, text, event

w = WorkspaceClient()

# Configure connection parameters (get these from the Connect dialog in the LakeBase App)
endpoint = "projects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>"
username = "your.email@company.com"  # Your DB identity
host = "ep-example.database.region.databricks.com"  # Your compute endpoint hostname
port = 5432
database = "databricks_postgres"

# Create SQLAlchemy engine
connection_pool = create_engine(f"postgresql+psycopg2://{username}:@{host}:{port}/{database}?sslmode=require")

# Global variables for token management
postgres_password = None
last_password_refresh = time.time()

@event.listens_for(connection_pool, "do_connect")
def provide_token(dialect, conn_rec, cargs, cparams):
    global postgres_password, last_password_refresh

    # Refresh token if it's None or older than 15 minutes (900 seconds)
    if postgres_password is None or time.time() - last_password_refresh > 900:
        print("Refreshing PostgreSQL OAuth token")
        credential = w.postgres.generate_database_credential(endpoint=endpoint)
        postgres_password = credential.token
        last_password_refresh = time.time()

    cparams["password"] = postgres_password

# Use the connection pool
with connection_pool.connect() as conn:
    result = conn.execute(text("SELECT version()"))
    for row in result:
        print(f"Connected to PostgreSQL database. Version: {row}")

Проверка подлинности паролей postgres

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

Когда следует использовать пароли Postgres

Используйте проверку подлинности паролей Postgres, если:

  • Приложение или средство не может обновлять учетные данные каждый час
  • У вас есть долговременные процессы, требующие устойчивых учетных данных
  • Клиентская библиотека не поддерживает смену маркера OAuth
  • Для обеспечения совместимости требуется традиционная проверка подлинности базы данных

Как работают пароли Postgres

  • Время существования пароля: срок действия паролей не истекает автоматически
  • Нет интеграции с рабочей областью: проверка подлинности обрабатывается Postgres, а не аутентификацией рабочей области Azure Databricks
  • Управление вручную: пароли должны вращаться вручную и распределяться между пользователями
  • Время ожидания подключения по-прежнему применяется: даже если срок действия паролей не истекает, подключения по-прежнему подвергаются 24-часовому тайм-ауту бездействия и 7-дневному максимальному времени соединения.

Вопросы безопасности

  • Хранилище паролей. Безопасное хранение паролей с помощью переменных среды или систем управления секретами
  • Протокол SSL: все подключения должны использовать SSL (sslmode=require)

Дальнейшие шаги