Salta el contingut

Publicació i permisos

Exercici publishing-and-permissions-annex.pdf · PDF

Una pregunta ràpida. A part de tu i del teu professor, qui ha vist el teu quadre de comandament (dashboard) Steam market?

Ningú. Vas construir la fila de KPI, les pestanyes i els filtres, i tot plegat continua vivint en un lloc on només tu pots obrir-lo. Això és un problema, perquè un quadre de comandament es fa perquè el llegeixi una altra persona. Un quadre de comandament que ningú no pot obrir no el llegeix ningú, per bons que siguin els seus gràfics.

Així que en aquesta lliçó canvies de seient. Deixes de ser l'autor i et converteixes en el lector: entres com una persona amb gairebé cap dret, descobreixes per què no veu res i ho arregles pas a pas.

Què aprendràs

  • Publicar un quadre de comandament i dir què canvien realment Draft (esborrany) i Published (publicat)
  • Anomenar què poden fer els tres rols que porta Superset (Admin, Alpha, Gamma)
  • Crear un lector amb el rol Gamma i mirar Superset amb els seus ulls
  • Donar a un rol accés a un dataset i explicar per què llavors apareix el quadre de comandament
  • Compartir un quadre de comandament amb un enllaç i explicar per què un enllaç no és un permís
  • Evitar la trampa: "l'he publicat, així que tothom el pot veure"

Un servidor de joc amb dos panys

Pensa en un servidor d'un joc multijugador. Mentre el propietari encara construeix el món, el servidor és privat: només hi entren el propietari i els administradors. Un dia s'obre. Però fins i tot llavors, cada jugador té un rang, i el rang decideix a quines zones pot entrar.

Superset funciona igual. Entre el teu quadre de comandament i un lector hi ha dos panys, i cadascun necessita la seva clau:

Pany La pregunta que fa Al servidor de joc La clau
1 · Draft o Published Aquest quadre de comandament encara s'està construint? El servidor és privat, o és obert L'autor el publica
2 · Rol i dataset Aquest usuari pot llegir les dades que hi ha darrere dels gràfics? El rang del jugador el deixa entrar a aquesta zona, o no Un admin dona a un dels rols de l'usuari accés al dataset
flowchart LR
    R["<b>Un lector</b><br>amb sessió a Superset"] --> L1{"<b>Pany 1</b><br>El quadre de comandament<br>està Published?"}
    L1 -- "No: Draft" --> X1["No surt a la seva llista"]
    L1 -- "Sí" --> L2{"<b>Pany 2</b><br>Algun dels seus rols<br>té accés al dataset?"}
    L2 -- "No" --> X2["Encara no surt a la seva llista"]
    L2 -- "Sí" --> OK["<b>Llegeix el quadre de comandament</b><br>i els filtres funcionen"]

Mantindrem el servidor de joc durant tota la pàgina. Recorda la forma del diagrama: dues preguntes, en aquest ordre.

Pany 1: Draft o Published

Un quadre de comandament en esborrany (draft) és un que encara s'està construint: només el poden veure els seus propietaris i els admins. Un quadre de comandament publicat és un que l'autor ha declarat llest.

Obre el teu quadre de comandament Steam market i mira al costat del títol. Hi ha una etiqueta petita: Draft. La documentació de Superset és contundent sobre què vol dir:

"Draft dashboards are only visible to the dashboard owners and admins."

Fes clic a l'etiqueta i es transforma en Published. A la llista Dashboards, la columna Status també canvia.

Qui són els propietaris (owners)? Els usuaris que tenen permís per editar el quadre de comandament. Tu ets un d'ells, perquè el vas crear. Un propietari és el constructor d'aquell món; publicar és el moment en què el constructor obre el servidor.

Compte: publicat no vol dir públic

La paraula confon. Published no posa el teu quadre de comandament a internet. Només vol dir "ja no amagat com a esborrany". Un lector encara necessita un usuari de Superset, i encara ha de passar el segon pany.

Pany 2: rols i datasets

Un rol és un conjunt de permisos amb nom. Cada usuari té un o més rols, i un usuari pot fer exactament el que els seus rols permeten.

Un permís és un únic dret: veure aquest menú, llegir aquest dataset, editar aquell gràfic. Ningú no reparteix els permisos un per un a cada usuari: seria interminable. Poses els permisos dins d'un rol i dones el rol a la gent. El rol és el rang al servidor de joc.

Superset porta tres rols principals. La seva documentació els descriu així:

Rol Al servidor de joc Què pot fer
Admin L'administrador del servidor Tot, inclosos donar i retirar drets i canviar els gràfics i quadres de comandament dels altres
Alpha Un constructor de confiança Veu totes les fonts de dades i en pot afegir de noves, però només modifica el que és seu i no pot donar drets a ningú més
Gamma Un jugador amb rang Només veu gràfics i quadres de comandament fets a partir de fonts de dades a les quals se li ha donat accés. Sobretot és un lector

A la teva màquina virtual ets Admin. Per això tot ha funcionat sempre: un admin travessa totes les portes. Un lector de veritat sol ser Gamma.

Ara la pregunta que importa. Un usuari Gamma i un quadre de comandament que acabes de publicar. El veu?

Encara no. Altra vegada la documentació de Superset:

"Published dashboards are visible to all users with access to the underlying datasets."

Llegeix lentament les quatre últimes paraules. A Superset, els permisos pengen del dataset, i el quadre de comandament els hereta. El teu quadre de comandament Steam market està construït sobre el dataset games_clean. Un usuari Gamma sense accés a games_clean no pot veure cap gràfic fet a partir d'ell, així que tampoc no pot veure el quadre de comandament.

Published obre el primer pany; l'accés al dataset obre el segon.

Compte: no vas donar accés al quadre de comandament

Quan dones a un rol accés a games_clean, no estàs dient "aquesta persona pot llegir Steam market". Estàs dient "aquesta persona pot llegir tot el que s'ha construït sobre games_clean": cada gràfic, cada quadre de comandament, avui i en el futur. Abans d'obrir un dataset, pensa què més l'utilitza.

La base de dades té un usuari nou?

No. PostgreSQL no sap que existeixen els teus lectors. Superset parla amb la base de dades a través de l'única connexió que vas configurar a la Unitat 1, Dades classe, i després decideix per si mateix qui hi pot preguntar. Els rols viuen a Superset, no a la base de dades.

El mínim que els deixa llegir

Podries saltar-te tot això i fer Admin cada lector. El quadre de comandament apareixeria a l'instant. També deixaria que cada lector esborrés cada quadre de comandament i llegís cada dataset del servidor.

Els experts en seguretat tenen un nom per a l'instint correcte, i és més antic del que et pensaries. El 1975, Jerome Saltzer i Michael Schroeder van publicar un article titulat The Protection of Information in Computer Systems. Un dels seus principis de disseny es va fer famós com a principi del mínim privilegi: cada usuari ha de treballar amb el conjunt de drets més petit que li permeti fer la seva feina, i res més.

Per a un lector de quadres de comandament, aquest conjunt mínim és fàcil d'escriure:

El lector necessita Per tant li dones
Entrar i obrir les pàgines del quadre de comandament El rol Gamma
Llegir les dades que hi ha darrere d'aquest quadre de comandament Un rol addicional amb accés al seu dataset
Res més Res més

Gamma més un rol. Aquesta és tota la recepta, i és el que construiràs ara.

Prova-ho: els ulls del lector

Necessites dues finestres del navegador. La normal és tu, l'Admin. Una finestra privada (d'incògnit) és el lector. Una finestra privada no comparteix la teva sessió, i per això és la manera que una sola persona entri com a dos usuaris alhora.

Treballa a la teva VM, en ordre, i anota cada resultat abans de continuar. L'experiment només té sentit si veus cada "no" abans d'arreglar-lo.

Pas 1 — Un lector que no veu res. Comprova que Steam market encara diu Draft. Després crea el lector:

On Fes això
Finestra Admin Settings → List Users → + User
El formulari Username: viewer. Qualsevol nom i cognom. Un correu inventat que acabi en .example. Roles: Gamma. Una contrasenya que t'inventis i apuntis
El formulari Marca Is active?. Si no el marques, l'usuari existeix però no pot entrar
El formulari Save
Finestra privada Obre el teu Superset i entra com a viewer
Finestra privada Obre Dashboards. Mira també els menús de dalt

Hauries de veure una llista Dashboards buida. Charts i Datasets també estan buits. I els menús són més curts: el menú SQL (amb SQL Lab) ha desaparegut, i també les entrades Security dins de Settings. Un usuari Gamma ni tan sols pot arribar a la pantalla on es creen els usuaris.

Pas 2 — Obre el primer pany. A la finestra Admin, obre Steam market i fes clic a Draft → Published. A la finestra privada, recarrega Dashboards.

Continua buida. No arreglis res encara: aquest és el moment més important de la lliçó. El quadre de comandament està publicat i el lector continua sense veure'l. El primer pany és obert. El segon, no.

Pas 3 — Obre el segon pany. Ara dona al lector un rang que arribi a les dades:

On Fes això
Finestra Admin Settings → List Roles → + Role. Role Name: Steam readers
El formulari A Permissions escriu games clean, amb un espai: aquesta llista mostra cada _ com un espai
El formulari Tria l'entrada que comença per datasource access i anomena [Dades classe].[games clean]. Save
Finestra Admin Settings → List Users → edita viewer → Roles: Gamma i Steam readers. Save
Finestra privada Recarrega Dashboards, obre Steam market, prova un filtre

Ara el lector obre el quadre de comandament. La fila de KPI diu 26,685 · 11.6% · 4.99 · 623, exactament igual que per a tu, i els filtres funcionen.

Aquests quatre números no són cap casualitat. Els gràfics del lector executen la mateixa consulta sobre les mateixes dades que els teus:

SELECT COUNT(*), ROUND(100 * AVG(is_free::int), 1),
       PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY price),
       COUNT(*) FILTER (WHERE owners_tier = 'Hit')
FROM games_clean;
count round percentile_cont count
26685 11.6 4.99 623

Un rol decideix si pots llegir un dataset. No canvia què diu el dataset.

Pas 4 — Un enllaç no és una clau. Al quadre de comandament, a la finestra Admin: els tres punts → Share → Copy permalink to clipboard. A la finestra privada, tanca la sessió i enganxa l'enllaç. Després torna a entrar com a viewer i enganxa'l una altra vegada.

Sense sessió, l'enllaç et porta a la pàgina d'inici de sessió. Amb la sessió de viewer, obre el quadre de comandament, amb els filtres exactament com eren quan es va copiar l'enllaç. Un permalink (enllaç permanent) és una adreça que recorda l'estat del quadre de comandament. No porta cap dret.

Si alguna cosa va malament
Què veus Què ha passat Solució
"Invalid login" per a viewer Contrasenya incorrecta, o s'ha deixat Is active? sense marcar List Users mostra No a la columna d'actiu: edita l'usuari i marca-ho
viewer ja veu el quadre de comandament al Pas 1 o 2 Estàs provant a la finestra Admin, o a viewer se li ha donat Alpha o Admin Comprova el nom d'usuari a dalt a la dreta, i els Roles de l'usuari
viewer no pot obrir cap pàgina després del Pas 3 Gamma s'ha substituït per Steam readers en lloc d'afegir-s'hi L'usuari necessita tots dos: Steam readers sol no té dret a obrir cap pàgina
El permís no surt a la llista Has escrit games_clean amb el guió baix Escriu games clean amb un espai i espera la llista
Un gràfic mostra un error d'accés per a viewer Aquest gràfic utilitza un altre dataset Afegeix també a Steam readers el permís d'aquest dataset

Els quatre estats

Posa les teves notes una al costat de l'altra. Aquesta taula és tota la lliçó:

Estat Quadre de comandament Rols de viewer viewer el veu?
1 Draft Gamma No. Tots dos panys tancats
2 Published Gamma No. Sense accés a games_clean
3 Published Gamma + Steam readers Sí, i els filtres funcionen
4 (l'enllaç) sense sessió La pàgina d'inici de sessió. L'enllaç no porta cap dret

A l'estat 2, on era el problema: al quadre de comandament o a les dades? A les dades. El quadre de comandament estava llest. El rang del lector no arribava al dataset.

Compte: Draft no és un mur de seguretat

Si tornes un quadre de comandament a Draft, desapareix de la llista del lector. Però el rol no es toca: el lector encara pot obrir la llista Charts i veure cada gràfic construït sobre games_clean, amb les seves dades. Draft amaga el quadre de comandament, no les dades. Per treure dades a algú, cal treure el dataset del seu rol.

Una regla sense excepcions

Un enllaç comparteix una vista. Les contrasenyes i les claus d'API no s'hi envien mai, i no s'escriuen mai al quadre de comandament mateix: ni en un gràfic, ni en una nota, ni en una captura de pantalla. Si les dades del teu projecte venien d'una API, comprova-ho abans de publicar.

Idees clau

  • Un quadre de comandament existeix perquè el llegeixi una altra persona. Entre ell i un lector hi ha dos panys.
  • Pany 1 — Draft o Published. Un esborrany només el veuen els seus propietaris (els usuaris que el poden editar) i els admins. Published vol dir "ja no és un esborrany", no "públic a internet".
  • Pany 2 — rols i datasets. Un rol és un conjunt de permisos. Admin ho pot fer tot, Alpha veu totes les dades però només modifica el que és seu, Gamma només veu el que està construït sobre datasets als quals se li ha donat accés.
  • Els permisos pengen del dataset; el quadre de comandament els hereta. Donar accés a un dataset obre tot el que s'hi ha construït.
  • Mínim privilegi (Saltzer i Schroeder, 1975): dona a un lector el mínim que li permeti llegir — Gamma més un rol.
  • Un permalink és una adreça, no una clau. I els rols viuen a Superset: la base de dades no té cap usuari nou.

Comprovació ràpida

1. Qui pot veure un quadre de comandament que encara està marcat com a Draft?
  • Tots els usuaris que tenen un usuari de Superset
  • Els seus propietaris i els admins
  • Només l'usuari que el va crear, ni tan sols els admins
  • Qualsevol persona que tingui l'enllaç

Un esborrany és el servidor privat mentre el món encara s'està construint: només hi entren els propietaris (els usuaris que poden editar el quadre de comandament) i els admins. Un enllaç no ho canvia, perquè un enllaç no porta cap dret.

2. Fas clic a Draft → Published. Un company que només té el rol Gamma recarrega la seva llista de Dashboards. Què hi veu?
  • El quadre de comandament, perquè els quadres de comandament publicats són visibles per a tothom
  • El quadre de comandament, però amb els gràfics buits
  • Encara res, perquè cap dels seus rols té accés al dataset que hi ha darrere dels gràfics
  • Un missatge d'error que demana la contrasenya de la base de dades

Published només obre el primer pany. Superset mostra un quadre de comandament publicat als usuaris "with access to the underlying datasets", i un usuari Gamma normal no n'ha rebut cap. Dos panys, dues claus.

3. Quina descripció correspon al rol Alpha?
  • Pot fer-ho tot, inclosos donar i retirar els drets d'altres persones
  • Veu totes les fonts de dades i en pot afegir de noves, però només modifica el que és seu i no pot concedir drets
  • Només veu gràfics i quadres de comandament construïts sobre fonts de dades a les quals se li ha donat accés
  • Només pot utilitzar SQL Lab

Alpha és el constructor de confiança: totes les dades, però cap poder sobre la feina ni els drets dels altres. La primera opció és Admin; la tercera és Gamma.

4. Afegeixes el permís datasource access sobre games_clean al rol Steam readers. Què has obert realment?
  • Només el quadre de comandament Steam market
  • Només els gràfics de la fila de KPI
  • Cada gràfic i cada quadre de comandament construïts sobre games_clean, ara i en el futur
  • Un compte nou de PostgreSQL per a cada lector

Els permisos pengen del dataset, i els gràfics i els quadres de comandament els hereten. Per això penses què més utilitza un dataset abans d'obrir-lo. I la base de dades no es toca: els rols viuen a Superset.

5. Copies el permalink del teu quadre de comandament publicat i l'envies a un amic que no té cap usuari de Superset. Què passa quan l'obre?
  • Veu el quadre de comandament, però no pot fer servir els filtres
  • Arriba a la pàgina d'inici de sessió
  • Veu el quadre de comandament amb tots els filtres esborrats
  • Es converteix automàticament en usuari Gamma

Un permalink és una adreça que recorda l'estat del quadre de comandament. No és una clau: sense sessió ni un rol que arribi al dataset, porta a la pàgina d'inici de sessió.

6. Després d'afegir el rol nou, el teu lector no pot obrir cap pàgina. Quin és l'error més probable?
  • El quadre de comandament ha tornat a Draft
  • La contrasenya del lector ha caducat
  • Gamma s'ha substituït pel rol nou en lloc de mantenir-lo al costat
  • El dataset té massa files per a un usuari Gamma

El rol nou només conté un permís: llegir un dataset. El dret a entrar i obrir les pàgines del quadre de comandament ve de Gamma. El lector necessita tots dos rols.

7. Un quadre de comandament d'empresa utilitza dos datasets: vendes i salaris. L'equip de vendes ha de poder llegir els gràfics de vendes però no ha de veure mai els salaris. Tria les dues afirmacions que són certes.
  • Donar a l'equip de vendes un rol amb accés només al dataset de vendes manté tancades les dades de salaris
  • Deixar el quadre de comandament en Draft és una manera segura de protegir els salaris
  • Fer Admin tot l'equip de vendes és la solució correcta més senzilla
  • Els gràfics de salaris pertanyen a un quadre de comandament apart, per a un rol que sí que tingui accés al dataset de salaris

L'accés es decideix per dataset, així que la divisió ha de seguir els datasets: un rol per a cada públic, i els gràfics que cada públic no pot llegir, en un quadre de comandament propi. Draft amaga el quadre de comandament, no les dades, i un Admin pot llegir tots els datasets: tot el contrari del mínim privilegi.

El teu quadre de comandament ja té lectors. Però què passa si aquests lectors treballen en un lloc que no ha sentit mai a parlar de Superset? Ara toca Informes amb Power BI, on reconstrueixes tres dels teus gràfics de Steam en una altra eina i comproves que el que saps continua funcionant.