[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 548.   SQL-Ledger per la didattica

Per usare SQL-Ledger in un laboratorio didattico, dovendo seguire simultaneamente un certo numero di studenti, è necessario predisporre degli accorgimenti per evitare di perdere tempo. Questo capitolo ha lo scopo di annotare alcune cose che possono essere utili in tal senso.

548.1   Creazione delle utenze

La directory users/ (capitolo 544) contiene dei file con le informazioni degli utenti. In pratica, SQL-Ledger non utilizza una base di dati per queste informazioni, ma dei file di testo normali.

Osservando i file di questa directory si intende che il file members contiene una serie di sezioni, una per ogni utente, contenenti le informazioni che riguardano ognuno di questi. Il file potrebbe apparire così:

# SQL-Ledger Accounting members

[root login]
password=

[pippo]
acs=
address=via del settimo cielo, 7\nI-31100 Treviso
admin=
businessnumber=
charset=
company=Azienda di prova
countrycode=it
currency=
dateformat=dd/mm/yy
dbconnect=dbi:Pg:dbname=pippo
dbdriver=Pg
dbhost=
dbname=prova
dboptions=set DateStyle to 'SQL, EUROPEAN'
dbpasswd=
dbport=
dbuser=sql-ledger
email=
fax=0422,456788
name=Pippo
numberformat=1000,00
password=
printer=lpr
shippingpoint=
sid=
signature=
stylesheet=sql-ledger.css
tel=0422,456789
templates=templates/pippo
vclimit=200

Si intuisce che per creare un altro utente, è sufficiente copiare la sezione di un utente preesistente, modificando ciò che serve. In questo caso, si potrebbe aggiungere l'utente tizio:

# SQL-Ledger Accounting members

[root login]
password=

[pippo]
acs=
address=via del settimo cielo, 7\nI-31100 Treviso
admin=
businessnumber=
charset=
...

[tizio]
acs=
address=via del settimo cielo, 7\nI-31100 Treviso
admin=
...
dbconnect=dbi:Pg:dbname=pippo
...
dbname=prova
...
templates=templates/pippo
vclimit=200

Nell'esempio, appaiono in evidenza le direttive dbconnect, dbname e templates, che potrebbero richiedere una modifica. È evidente che per associare il nuovo utente a un insieme di dati differente, occorre modificare le direttiva dbconnect e dbname; inoltre, se si desidera consentire la modifica dei modelli usati per la produzione di documenti, occorre predisporre un'altra directory alternativa a templates/pippo/.

Oltre al file members, è necessario prestare attenzione anche ai file con estensione .conf, che contengono le informazioni di ogni singolo utente; per esempio, l'utente tizio di SQL-Ledger deve disporre del file tizio.conf in questa directory. Il contenuto è analogo alla sezione di ogni utente nel file members; segue l'esempio dell'utente pippo:

# configuration file for pippo

%myconfig = (
  acs => '',
  address => 'via del settimo cielo, 7\nI-31100 Treviso',
  admin => '',
  businessnumber => '',
  charset => '',
  company => 'Azienda di prova',
  countrycode => 'it',
  currency => '',
  dateformat => 'dd/mm/yy',
  dbconnect => 'dbi:Pg:dbname=pippo',
  dbdriver => 'Pg',
  dbhost => '',
  dbname => 'pippo',
  dboptions => 'set DateStyle to \'SQL, EUROPEAN\'',
  dbpasswd => '',
  dbport => '',
  dbuser => 'sql-ledger',
  email => '',
  fax => '0422,456788',
  name => 'Pippo',
  numberformat => '1000,00',
  password => '',
  printer => 'lpr',
  shippingpoint => '',
  sid => '',
  signature => '',
  stylesheet => 'sql-ledger.css',
  tel => '0422,456789',
  templates => 'templates/pippo',
  vclimit => '200',
);

Di conseguenza, per creare l'utente tizio si copia il file pippo.conf nel file tizio.conf e si modificano le direttive importanti, per esempio quelle già viste a proposito del file members:

# configuration file for tizio

%myconfig = (
  acs => '',
  address => 'via del settimo cielo, 7\nI-31100 Treviso',
  admin => '',
    ...
  dbconnect => 'dbi:Pg:dbname=base_di_dati',
    ...
  dbname => 'base_di_dati',
    ...
  templates => 'templates/base_di_dati',
  vclimit => '200',
);

Per semplificare le cose, conviene predisporre un utente «standard», denominato in modo diverso dagli altri, partendo da un'utenza configurata solo in modo superficiale. Si potrebbe chiamare questa utenza precisamente UTENZA_STANDARD:

  1. si comincia creando una directory per i modelli, precisamente la directory templates/UTENZA_STANDARD/, copiando al suo interno i file dell'altra utenza di riferimento, mantenendo gli stessi permessi (i file e la directory stessa devono appartenere all'utente del sistema operativo usato per far funzionare il servente HTTP);

  2. si predispone un file users/UTENZA_STANDARD.conf appropriato, dove sia il nominativo dell'utente, sia il nome della base di dati sono UTENZA_STANDARD, con gli stessi permessi degli altri file .conf;

  3. si predispone un file aggiuntivo, denominato users/members.UTENZA_STANDARD, contenente soltanto una sezione come quelle del file users/members, in modo da poter aggiungere facilmente un utente nel file users/members, partendo dal modello del file users/members.UTENZA_STANDARD.

Per creare rapidamente una serie di utenze, diventa sufficiente predisporre uno script simile a quello seguente, il quale parte dal presupposto che ogni insieme di dati viene associato esattamente a un'utente con lo stesso nome:

#!/bin/sh

# SQL-Ledger main directory.
SQL_LEDGER_ROOT="/opt/sql-ledger"

# Template user.
TEMPLATE_NAME="UTENZA_STANDARD"

# OS owner and group for files.
OS_OWNER="www-data"
OS_GROUP"www-data"

# The new name to create.
NEW_NAME="$1"

# Create the template directory.
cp -dpRv $SQL_LEDGER_ROOT/templates/$TEMPLATE_NAME      \
         $SQL_LEDGER_ROOT/templates/$NEW_NAME

# Create the users/$NEW_NAME.conf file.
cat      $SQL_LEDGER_ROOT/users/$TEMPLATE_NAME.conf     \
         | sed "s/$TEMPLATE_NAME/$NEW_NAME/g            \
         > $SQL_LEDGER_ROOT/users/$NEW_NAME.conf
chmod 0600 $SQL_LEDGER_ROOT/users/$NEW_NAME.conf
chown $OS_OWNER:$OS_GROUP $SQL_LEDGER_ROOT/users/$NEW_NAME.conf

# Create the users/$NEW_NAME.conf file.
cat      $SQL_LEDGER_ROOT/users/members.$TEMPLATE_NAME  \
         | sed "s/$TEMPLATE_NAME/$NEW_NAME/g            \
         >> $SQL_LEDGER_ROOT/users/members

Come si vede, lo script manca di qualunque tipo di protezione dagli errori, ma dovrebbe rendere l'idea di ciò che si vuole fare. Naturalmente, lo script deve essere eseguito con i privilegi dell'utente root, o almeno con quelli dell'utente fittizio usato dal servente HTTP.

548.2   Creazione degli insiemi di dati

La creazione degli insiemi di dati va fatta prima delle utenze, ma qui si preferisce annotare dopo, perché si tratta di un'operazione un po' più delicata.

Inizialmente si parte da un insieme di dati di prova, che si ritiene adatto come punto di partenza per le esercitazioni. Questo insieme di dati fa capo a una base di dati di PostgreSQL con lo stesso nome. Si fa una copia di sicurezza di questa base di dati con l'ausilio del programma pg_dump:

su postgres pg_dump prova > prova.sql[Invio]

Il comando mostrato inizia con su, per sottolineare la necessità di passare ai privilegi dell'utente standard di PostgreSQL. Come si intende, si genera il file prova.sql.

su postgres createdb nuovo[Invio]

Si crea così una nuova base di dati, collocandovi poi all'interno i dati salvati nel file prova.sql:

psql nuovo sql-ledger < prova.sql[Invio]

Come si vede, si utilizza il programma psql per popolare la base di dati denominata nuovo, utilizzando l'identità sql-ledger, che dovrebbe essere quella standard usata per SQL-Ledger. Se la base di dati (ovvero il nuovo insieme di dati) è già associato a un utente, si può verificare di avere ottenuto la riproduzione dei dati.

Lo script già presentato a proposito degli utenti, potrebbe essere completato nel modo seguente, se si parte dal presupposto che il file contenente i dati standard sia sql/UTENZA_STANDARD.sql:

#!/bin/sh

# SQL-Ledger main directory.
SQL_LEDGER_ROOT="/opt/sql-ledger"

# Template user.
TEMPLATE_NAME="UTENZA_STANDARD"

# OS owner and group for files.
OS_OWNER="www-data"
OS_GROUP"www-data"

# The new name to create.
NEW_NAME="$1"

# Create the new data base.
su postgres createdb $NEW_NAME
psql $NEW_NAME sql-ledger < $SQL_LEDGER_ROOT/sql/$TEMPLATE_NAME

# Create the template directory.
cp -dpRv $SQL_LEDGER_ROOT/templates/$TEMPLATE_NAME      \
         $SQL_LEDGER_ROOT/templates/$NEW_NAME

# Create the users/$NEW_NAME.conf file.
cat      $SQL_LEDGER_ROOT/users/$TEMPLATE_NAME.conf     \
         | sed "s/$TEMPLATE_NAME/$NEW_NAME/g            \
         > $SQL_LEDGER_ROOT/users/$NEW_NAME.conf
chmod 0600 $SQL_LEDGER_ROOT/users/$NEW_NAME.conf
chown $OS_OWNER:$OS_GROUP $SQL_LEDGER_ROOT/users/$NEW_NAME.conf

# Create the users/$NEW_NAME.conf file.
cat      $SQL_LEDGER_ROOT/users/members.$TEMPLATE_NAME  \
         | sed "s/$TEMPLATE_NAME/$NEW_NAME/g            \
         >> $SQL_LEDGER_ROOT/users/members

Naturalmente, perché tutto funzioni in modo semplice, è necessario che gli accessi relativi a PostgreSQL non richiedano l'inserimento di parole d'ordine, limitando semplicemente la possibilità di accesso all'elaboratore presso cui queste operazioni sono così semplici.

Se gli studenti avessero accesso presso l'elaboratore presso cui PostgreSQL consente di lavorare in modo così libero, sarebbe possibile per loro, volontariamente o meno, di sovrascrivere i dati di altri. Di conseguenza, il recupero di dati salvati da parte di un utente deve essere eseguito dall'insegnante.

Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome sql_ledger_per_la_didattica.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]

Valid ISO-HTML!

CSS validator!