Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Разрешениями проекта Lakebase можно управлять программно с помощью стандартного API разрешений Azure Databricks, интерфейса командной строки Azure Databricks, SDK Azure Databricks и Terraform.
Общие сведения о типах разрешений, разрешениях по умолчанию и управлении разрешениями в пользовательском интерфейсе Lakebase см. в разделе "Управление разрешениями проекта".
Уровни разрешений
Разрешаемые уровни доступа для проектов Lakebase — CAN_USE и CAN_MANAGE.
CAN_CREATE — это унаследованный уровень, который автоматически передается из рабочей области всем пользователям и не может быть явно предоставлен или отменен в проекте. Попытки предоставить CAN_CREATE через API возвращают HTTP 400.
API разрешений определяет проекты по идентификатору проекта (например, my-app). Это значение можно найти в project_id поле состояния проекта, возвращаемого API получения проекта и списка проектов.
Замечание
Поле project_id доступно в ответах REST API, но пока недоступно в объектах ответа SDK или CLI. При использовании пакета SDK можно извлечь идентификатор проекта из name поля, удалив projects/ префикс (например, projects/my-app становится my-app).
REST API
Разрешения для проектов используют стандартный API управления разрешениями Azure Databricks в /api/2.0/permissions/database-projects/{project_id}.
Получение текущих разрешений
curl -X GET "https://${DATABRICKS_HOST}/api/2.0/permissions/database-projects/${PROJECT_ID}" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq
Предоставление или обновление разрешений (PATCH)
curl -X PATCH "https://${DATABRICKS_HOST}/api/2.0/permissions/database-projects/${PROJECT_ID}" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"access_control_list": [
{
"user_name": "user@example.com",
"permission_level": "CAN_USE"
}
]
}'
Чтобы предоставить права доступа группе или субъект-службе, замените user_name на group_name или service_principal_name.
Замечание
PATCH является аддитивным и не может изменить существующий более высокий уровень разрешений. Например, установка заплатки CAN_USE для пользователя, который уже имеет CAN_MANAGE, не имеет никаких последствий. Чтобы изменить или удалить разрешение, используйте PUT.
Замените все явные разрешения (PUT)
Предупреждение
PUT заменяет весь явный список управления доступом (ACL). Любой пользователь, группа или субъект-служба, не включенный в текст запроса, теряет свое явно предоставленное разрешение. Наследуемые разрешения (например, администраторы рабочей области) не затрагиваются.
curl -X PUT "https://${DATABRICKS_HOST}/api/2.0/permissions/database-projects/${PROJECT_ID}" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"access_control_list": [
{
"user_name": "user@example.com",
"permission_level": "CAN_MANAGE"
}
]
}'
Полный справочник по API разрешений см. в разделе API разрешений.
CLI
databricks permissions Используйте команды (которые упаковывают API разрешений) для управления разрешениями проекта из командной строки.
Предоставление или обновление разрешений
# PROJECT_ID is your project ID (e.g., my-app).
databricks permissions update database-projects ${PROJECT_ID} \
--json '{
"access_control_list": [
{
"user_name": "user@example.com",
"permission_level": "CAN_USE"
}
]
}'
Получение текущих разрешений
databricks permissions get database-projects ${PROJECT_ID}
Замечание
Используйте databricks permissions (не databricks postgres) для управления ACL проекта.
databricks postgres Подкоманда управляет ресурсами проекта (ветвями, вычислениями и т. д.), а не разрешениями.
SDK
Используйте интерфейс WorkspaceClient.permissions в Python, Java или пакет SDK go для управления разрешениями проекта.
пакет SDK Python
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.iam import AccessControlRequest, PermissionLevel
w = WorkspaceClient()
# Your project ID (e.g., "my-app")
PROJECT_ID = "<project-id>"
# Grant CAN_USE to a user (PATCH is additive and cannot downgrade)
w.permissions.update(
request_object_type="database-projects",
request_object_id=PROJECT_ID,
access_control_list=[
AccessControlRequest(
user_name="user@example.com",
permission_level=PermissionLevel.CAN_USE,
)
],
)
# Get current permissions
permissions = w.permissions.get(
request_object_type="database-projects",
request_object_id=PROJECT_ID,
)
print(permissions)
# Revoke or downgrade: use set() (PUT), not update() (PATCH)
# update() with an empty list is a no-op; set() replaces the full explicit ACL
w.permissions.set(
request_object_type="database-projects",
request_object_id=PROJECT_ID,
access_control_list=[
# Include every identity that should retain explicit access
AccessControlRequest(
user_name="owner@example.com",
permission_level=PermissionLevel.CAN_MANAGE,
)
],
)
пакет SDK Java
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.iam.*;
WorkspaceClient w = new WorkspaceClient();
// Your project ID (e.g., "my-app")
String projectId = "<project-id>";
// Grant CAN_USE to a user (PATCH is additive and cannot downgrade)
w.permissions().update(new UpdateObjectPermissions()
.setRequestObjectType("database-projects")
.setRequestObjectId(projectId)
.setAccessControlList(List.of(
new AccessControlRequest()
.setUserName("user@example.com")
.setPermissionLevel(PermissionLevel.CAN_USE)
))
);
// Get current permissions
ObjectPermissions permissions = w.permissions().get(
new GetPermissionRequest()
.setRequestObjectType("database-projects")
.setRequestObjectId(projectId)
);
Пакет SDK для GO
import (
"github.com/databricks/databricks-sdk-go"
"github.com/databricks/databricks-sdk-go/service/iam"
)
w, _ := databricks.NewWorkspaceClient()
// Your project ID (e.g., "my-app")
projectID := "<project-id>"
// Grant CAN_USE to a user (Update is additive and cannot downgrade)
_, err := w.Permissions.Update(ctx, iam.UpdateObjectPermissions{
RequestObjectType: "database-projects",
RequestObjectId: projectID,
AccessControlList: []iam.AccessControlRequest{
{
UserName: "user@example.com",
PermissionLevel: iam.PermissionLevelCanUse,
},
},
})
// Get current permissions
permissions, err := w.Permissions.Get(ctx, iam.GetPermissionRequest{
RequestObjectType: "database-projects",
RequestObjectId: projectID,
})