Questa pagina descrive Calíope 1.5, la versione che sto costruendo adesso. La 1.4 è sull'App Store per Mac, iPad, iPhone, Apple Watch, Apple TV e Apple Vision Pro. 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.

In SQL Server un account è un login del server, senza host; in ogni database agisce tramite l'utente collegato, che Calíope trova da solo. I privilegi stanno in cinque ambiti —Globale (il server), Connessione (un database), Database (uno schema), Tabella e Routine— e un DENY appare come un terzo stato, barrato e con il suo nome: qui si vede ma non si cambia; si imposta e si toglie dall'Editor SQL.

Senza permesso di leggere gli account — in MySQL e MariaDB, SELECT sul database mysql — l'elenco dice «Impossibile leggere gli account del server», con il motivo del server sotto e un pulsante per riprovare, e il piè di pagina non mostra alcun numero. In PostgreSQL non succede: qualsiasi account può leggere i ruoli. In SQL Server, senza VIEW ANY DEFINITION vedi meno account, senza errore. E in Backup, senza quel permesso la sezione degli account del server non compare.

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 Utenti. Inserisci il nome, l’host e la password. L’account viene creato senza privilegi e resta selezionato, così puoi assegnarli subito.

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. Il ruolo viene creato con LOGIN e INHERIT, come fa CREATE USER, così può accedere; gli altri attributi si spuntano poi sulla sua scheda.

Nemmeno SQL Server: l'account è un login, senza host e senza metodo da scegliere.

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.

In SQL Server eliminare toglie l'utente dell'account in ogni database e poi il login. Il server rifiuta finché uno di quegli utenti possiede uno schema: passa prima lo schema a qualcun altro (ALTER AUTHORIZATION).

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.

Il modulo si apre con quello che ha il server: se l’account è bloccato e i suoi limiti orari. Un limite di 0 significa nessun limite, e riportarlo a 0 lo toglie. Lascia vuoto il campo della password se vuoi cambiare solo il resto.

In SQL Server porta la password e il blocco (ALTER LOGIN … DISABLE: il login non può entrare e conserva i suoi permessi); non ci sono limiti orari né data di scadenza per account.

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 — famiglia MySQL e SQL Server. Si applicano a tutto il server (p. es. SUPER o PROCESS in MySQL, VIEW SERVER STATE in SQL Server).
- Connessione — PostgreSQL e SQL Server. In PostgreSQL, i privilegi del database del cluster a cui punta il profilo: CONNECT, CREATE e TEMPORARY, che decidono se l’account può anche solo connettersi. In SQL Server, quelli su un database intero (CONNECT, CREATE TABLE…).
- Database — su tutti gli oggetti di un database (in PostgreSQL e SQL Server, 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