PowerGridDocumentation
Platform

ADR-001: Access and RLS

1 min readdocs/decisions/001-authz-rls.mdEdit on GitHub

Төлөв: батлагдсан (2026-10-14) · Хэрэгжүүлэлт: modules/powergrid/migrations/00002_authz.sql · Тест: modules/powergrid/authz_db_test.go

This page has not been translated yet — it is shown in Mongolian, the language it is written in.

01Шийдвэр

  • Nexus-ийн tenant_isolation policy-г хэвээр үлдээнэ. Түгээх компани зөвхөн өөрийн мөрийг уншиж, бичнэ.
  • Байгууллага дамнасан хандалт бол тусдаа, зөвхөн SELECT хийх permissive granted_read policy. Permissive учраас tenant_isolation-тай OR-оор нийлнэ. Grant нь хэзээ ч бичих эрх олгохгүй.
  • Эрхийн эх сурвалж нь authz.access_grant хүснэгт (ADR-006: PostgreSQL schema). Grant-ыг өгөгдлийн эзэн өөрөө олгоно. Бүх эзэмшигчийн өгөгдлийг хамарсан ALL grant (ЭХЗХ) зөвхөн платформын замаар (gerege_nexus_api) үүснэ.
  • authz.scope(action) нь SECURITY DEFINER функц. Session-ий app.current_tenant болон app.current_user-д таарах хүчинтэй grant-уудыг массив болгож буцаана. TOPOLOGY grant-ыг тухайн өдрийн topology-оор доош задална. Policy функцийг (SELECT …) дотор дууддаг тул InitPlan болж, statement бүрт нэг удаа тооцогдоно (EXPLAIN-д loops=1).
  • Мөр бүр зөвхөн өөрөөсөө өргөн буюу тэнцүү хүрээтэй grant-д харагдана:
    • METERING_POINT grant нь трансформаторыг харуулахгүй;
    • TOPOLOGY grant нь бүсийг болон үндэс node-оос дээших холбоосыг харуулахгүй.

02Хойшлуулсан зүйл

  • Scope cell: заалтын хүснэгт гарах үед EXPLAIN-аар хэмжиж нэмнэ. Бүртгэлийн хүснэгтүүд жижиг тул одоогоор хэрэггүй.
  • data_from/data_until: authz.scope() эдгээрийг буцаадаг. Харин бүртгэлийн хүснэгт хугацааны цуваа биш тул одоохондоо хэрэглэхгүй. Заалтын policy үүнийг ашиглана.
  • Байгууллага доторх хэрэглэгчийн хүрээг нарийсгах (инженер зөвхөн өөрийн бүс): restrictive policy шаардана, команд нэмэгдэх үед хийнэ.
  • pgTAP-ийн оронд Go integration тест: CI-ийн authz job бодит Postgres 16 дээр migrate хийгээд тестийг ажиллуулна. Нэмэлт extension шаардлагагүй.

03Итгэлийн хязгаар

Аппын DB хэрэглэгч app.* утгыг өөрөө тавьж чадна. Тиймээс энэ хамгаалалт аппын алдаанаас хамгаална, эвдэрсэн аппаас биш (GS §17.5). Функц эзэмшигч superuser биш бол FORCE RLS функцийг юу ч харахгүй болгоно. Өөрөөр хэлбэл энэ тохиолдолд эрх нээгдэхгүй тал руу унана.

Was this page helpful?Your answer helps improve the docs.