Questa pagina descrive Calíope 1.5, la versione che stiamo costruendo adesso. La 1.4 è finita ed è in revisione sull'App Store, e il negozio serve oggi la 1.3 sul Mac e la 1.2 su iPad. Il changelog dice in quale versione è arrivata ogni funzione.

Aggiunge a ogni argomento un pulsante «Apri in Calíope». Funziona solo con l'app installata.

Utenti

Gestione degli utenti

Crea, modifica ed elimina account del server con i loro privilegi.

Dove si trova: Workspace › Strumenti › Utenti

Apri Utenti dalla barra di navigazione del workspace. Il pannello di sinistra elenca tutti gli account del server, con quelli installati dal server raggruppati a parte; il campo di ricerca filtra per nome. Seleziona un account per caricarne i privilegi.

Quello che appare a destra dipende dal motore, perché il modello di sicurezza non è lo stesso. In MySQL e MariaDB un account è utente@host e i privilegi si concedono su quattro ambiti: Globale, Database, Tabella e Routine. In PostgreSQL un account è un ruolo, non c’è host, e al posto dell’ambito globale compaiono i suoi attributi, che non si concedono ma si impostano. Ciò che un motore non ha non viene disegnato in grigio: non viene disegnato.

Dentro ogni scheda le caselle sono raggruppate per Dati, Struttura, Routine, Amministrazione e Replica. Spunta ciò che serve e premi Salva modifiche; finché ci sono modifiche non applicate l’intestazione lo segnala, e Annulla modifiche torna a quello che c’è sul server.

Parole chiave: utenti, ruoli, privilegi, permessi, GRANT, amministrazione utenti

Creare un nuovo utente

Aggiungi un account con nome e password.

Dove si trova: Utenti › Nuovo utente

Premi Nuovo utente nella barra di Amministrazione utenti. Inserisci il nome e la password. L’account viene creato senza privilegi; assegnali dopo.

Il campo host e il selettore del metodo di autenticazione compaiono solo dove il motore li ha. PostgreSQL non ha né l’uno né l’altro: da dove si accetta una connessione lo decide il file pg_hba.conf del server, e come si cifra la password lo decide la configurazione del server, non l’account.

Parole chiave: creare utente, nuovo utente, CREATE USER, password

Eliminare un utente

Elimina un account dal server.

Dove si trova: Utenti › Elimina utente

Seleziona l’account nel pannello di sinistra e premi Elimina nell’intestazione. Una finestra di conferma mostra cosa verrà rimosso. L’azione è irreversibile.

Gli account installati dal server compaiono in un gruppo proprio e non si possono eliminare da qui.

In PostgreSQL il server può rifiutarsi, e non è un difetto di Calíope: un ruolo che possiede oggetti o che detiene privilegi non si può eliminare finché non glieli si toglie. Calíope non emette DROP OWNED BY di sua iniziativa, perché cancellerebbe dati che nessuno ha chiesto di cancellare. Togli prima le sue concessioni — comprese quelle di «tutte le tabelle», che lasciano anche un privilegio predefinito — oppure trasferisci ciò che possiede.

Parole chiave: eliminare utente, DROP USER, cancellare, revocare

Cambiare la password di un utente

Modifica la password di un account esistente.

Dove si trova: Utenti › Modifica utente

Seleziona l’account nel pannello di sinistra e premi Modifica nell’intestazione. Si apre il modulo di modifica.

Il modulo mostra solo quello che il motore ha. In MySQL e MariaDB contiene la password, il metodo di autenticazione, il blocco dell’account e i limiti di risorse orari. In PostgreSQL contiene la password e nient’altro: non c’è blocco — un account si chiude togliendogli l’attributo LOGIN, che sta sulla sua scheda — né limiti orari, mentre il numero di connessioni simultanee e la scadenza si modificano accanto agli attributi.

Lascia vuoto il campo della password se vuoi cambiare solo il resto.

Parole chiave: cambiare password, password, modificare utente, ALTER USER, credenziali, nuova password

Gestire i privilegi per database, tabella e routine

Assegna permessi granulari a livello di DB, tabella o routine specifica.

Dove si trova: Utenti › Albero dei privilegi

Ogni ambito di privilegi è una scheda con il suo contatore di concessi e il suo interruttore WITH GRANT OPTION:

- Attributi del ruolo — solo PostgreSQL. Non sono privilegi: sono proprietà del ruolo (LOGIN, SUPERUSER, CREATEDB…) scritte con ALTER ROLE. In fondo ci sono le connessioni simultanee e la scadenza.
- Globale — solo famiglia MySQL. Si applicano a tutto il server (p. es. SUPER, PROCESS, REPLICATION SLAVE).
- Connessione — solo PostgreSQL. I privilegi del database del cluster a cui punta il profilo: CONNECT, CREATE e TEMPORARY. È quello che decide se l’account può anche solo connettersi.
- Database — su tutti gli oggetti di un database (in PostgreSQL, di uno schema).
- Tabella — su una tabella specifica.
- Routine — su una procedura o funzione memorizzata.

Dentro ogni scheda le caselle sono raggruppate per categoria, con Seleziona tutto per gruppo, e ALL PRIVILEGES è evidenziato in alto perché concede l’intero ambito in una volta.

Per aggiungere un ambito che non compare, usa Aggiungi oggetto nella barra in basso. Salva modifiche esegue i REVOKE e GRANT necessari; se il server ne rifiuta qualcuno, appare un avviso accanto al pulsante con il dettaglio.

Parole chiave: privilegi, GRANT, REVOKE, database, tabella, routine, permessi granulari, colonne, EXECUTE, SUPER

Ruoli, ereditarietà e proprietà in PostgreSQL

Perché questa schermata non somiglia a quella di MySQL, e cosa significa ogni parte.

Dove si trova: Workspace › Strumenti › Utenti

PostgreSQL non ha utenti e gruppi separati: ha ruoli, e un ruolo è entrambe le cose insieme. Un ruolo con l’attributo LOGIN serve per entrare; uno senza serve a raggruppare privilegi e darli ad altri. Per questo la schermata cambia forma, e non per capriccio.

Non c’è host. Un account è un nome e basta. Da dove si accetta una connessione lo decide pg_hba.conf, che è del server e non dell’account, quindi Calíope non lo mostra qui e non lo può cambiare.

Gli attributi non sono privilegi. SUPERUSER, CREATEDB, CREATEROLE, REPLICATION, BYPASSRLS, INHERIT e LOGIN si impostano con ALTER ROLE, non si concedono con GRANT. Al salvataggio Calíope li scrive tutti: quello che lasci non spuntato viene spento. È ciò che rende veritiera la schermata — se si scrivesse solo lo spuntato, togliere la spunta non lo spegnerebbe e tornerebbe da solo alla prossima apertura dell’account.

L’appartenenza è transitiva. Se app appartiene a lettori e lettori ad auditori, allora app ha quello che ha auditori senza che nessuno gliel’abbia concesso. La scheda Appartiene a distingue le appartenenze dirette da quelle ereditate e mostra il percorso di ciascuna. Quelle ereditate non si possono togliere da qui, ed è per questo che non hanno pulsante: quello da revocare è l’anello, e appartiene a un altro ruolo.

PUBLIC non è un ruolo: è tutti. Compare nell’elenco come un account in più perché altrimenti un oggetto concesso a tutti sembrerebbe privato. Per impostazione predefinita PUBLIC può connettersi al database ed eseguire qualsiasi funzione.

Il proprietario ha tutto su ciò che possiede, e questo non appare mai come concessione. Una tabella appena creata non ha alcuna riga di privilegi nel catalogo, e il suo proprietario può comunque farne quello che vuole. Per questo l’intestazione porta l’etichetta «proprietario di N oggetti» e quelle schede sono disegnate spuntate e in grigio: non c’è nulla da concedere né da revocare.

«Concedi su tutte le tabelle» sono due istruzioni. In MySQL, ON database.* copre anche le tabelle create domani; qui servono due comandi che non significano la stessa cosa: uno raggiunge le tabelle che esistono ora e l’altro quelle future. Il secondo, inoltre, copre solo quelle create dall’account con cui Calíope è connesso. Nessuna delle due torna poi come casella sulla scheda dello schema, perché non sono privilegi dello schema. Il pulsante accanto le annulla entrambe, e serve: finché resta il privilegio predefinito, il server non lascia eliminare l’account.

Cosa non c’è. Nessun blocco dell’account — si toglie LOGIN —, nessun limite orario — solo il numero di connessioni simultanee —, nessun selettore del metodo di autenticazione — decide il server — e nessun FLUSH PRIVILEGES: qui il catalogo è la fonte, e un GRANT è già in vigore quando il server risponde.

Parole chiave: ruoli, PostgreSQL, ereditarietà, appartenenza, PUBLIC, proprietario, attributi, LOGIN, SUPERUSER, GRANT, privilegi predefiniti