Newsgroup: it.comp.appl.access
Titolo: Protezione utente senza distribuire il file .mdw

Ho provato ad impostare la protezione utente su un mio db (sia sul FE
che sul BE), perchè incuriosito dall'efficacia della tecnica di
Alessandro Baraldi. La tecnica è spiegata minuziosamente, sul sito
comune, per quanto riguarda la creazione del file .mdw, ma non vi è
alcun accenno sul come gestire l'accesso agli oggetti contenuti nei
file mdb/mde protetti, ed in particolare il collegamento delle
tabelle
(la procedura passo passo è descritta da Giuseppe Costanzi). Ho
provato ad effettuare manualmente i collegamenti con DAO, passando da
codice i parametri del file *.mdw, username e pwd, e tutto funziona
correttamente. Resta il fatto che ho necessità di richiamare il file
*.mdw e di indicarne il path. Mi chiedo dunque come si possa fare per
aggirare il problema ed evitare di dover distribuire anche il .mdw.
Senza di esso la routine genera un errore (ovviamente). Ho anche
provato, pur sapendo benissimo che non avrebbe funzionato, a tentare
di forzare la funzione CurrentUser(). Purtroppo non ho idea di come
si
possa gestire manualmente (da codice) la protezione a livello di
utente senza dover distribuire il mdw. Sarei grato a chi volesse
passarmi un po' di codice da cui prendere spunto. Grazie.

Vedo che nessuno ha risposto al mio quesito. Forse sono stato troppo
generico. Mi spiego meglio. Salterò ovviamente la parte relativa alla
creazione del file.mdw, ed illustrerò le due diverse procedure
adottate con codice vba.
---> 1) Collegamento delle tabelle con codice vba, senza passare per
il file.mdw bensì sfruttando il system.mdw (Errore di runtime
3033):
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim tdg As DAO.TableDef
Dim tdh As DAO.TableDef
Set db = CurrentDb
Set tdf = dbs.CreateTableDef("Spettacoli")
Set tdg = dbs.CreateTableDef("Artisti")
Set tdh = dbs.CreateTableDef("Contratti")
tdf.Connect = ";DATABASE=C:\Program Files\Archivio\ARCHIVIO.MDB"
tdg.Connect = ";DATABASE=C:\Program Files\Archivio\ARCHIVIO.MDB"
tdh.Connect = ";DATABASE=C:\Program Files\Archivio\ARCHIVIO.MDB"
tdf.SourceTableName = "Spettacoli"
tdg.SourceTableName = "Artisti"
tdh.SourceTableName = "Contratti"
dbs.TableDefs.Append tdf
dbs.TableDefs.Append tdg
dbs.TableDefs.Append tdh
---> 2) Collegamento delle tabelle con codice vba, passando i
parametri del file.mdw (tutto ok come previsto, ma con questa
procedura devo distribuire anche il file.mdw!):
Dim wrk As DAO.Workspace
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim tdg As DAO.TableDef
Dim tdh As DAO.TableDef
DBEngine.SystemDB = "C:\Program Files\Archivio\Licenza.mdw"
Set wrk = DBEngine.CreateWorkspace ("", "Agente3", "password")
Set db = wrk.OpenDatabase ("C:\Program Files\Archivio\ARCHIVIO.MDB")
tdf.Connect = ";DATABASE=C:\Program Files\Archivio\ARCHIVIO.MDB"
tdg.Connect = ";DATABASE=C:\Program Files\Archivio\ARCHIVIO.MDB"
tdh.Connect = ";DATABASE=C:\Program Files\Archivio\ARCHIVIO.MDB"
tdf.SourceTableName = "Spettacoli"
tdg.SourceTableName = "Artisti"
tdh.SourceTableName = "Contratti"
db.TableDefs.Append tdf
db.TableDefs.Append tdg
db.TableDefs.Append tdh
db.Close
wrk.Close
Preciso che l'applicazione è strutturata in un file BE (C:\Program
Files\Archivio\ARCHIVIO.MDB) ed un file FE.

 Files\Archivio\ARCHIVIO.MDB) ed un file FE.
-- 
Ciao
Geppo 

 - Mostra testo citato -
Ciao Geppo, ho letto le istruzioni di Giorgio Rancati al link che mi
hai inviato. Ma temo che questa non sia la soluzione al mio problema.
Infatti, se rimuovo la protezione a livello di utente, restituendo ad
admin tutti i privilegi, le tabelle del file BE ritorneranno
accessibili ed importabili da chiunque.
La procedura che a me interessa è descritta qui:
http://it.narkive.com/2006/1/15/2301288-protezione-utente-senza-distribuire-il-file-mdw.html
Ma, in sostanza, non viene spiegato come fare per rendere le tabelle
accessibili da vba, ed allo stesso tempo mantenerle protette da
lettura/import mediante protezione.mdw (senza però dover distribuire
al cliente anche questo file!).
Ciao
Marco


Dopo giorni e giorni di prove e riprove sono giunto ad una
conclusione. La tecnica in oggetto funziona efficacemente se impostata
sul file front-end. Tutte le tabelle linkate e le query residenti sul
front-end risultano inaccessibili con il file di default system.mdw.
Non è quindi necessario distribuire il file.mdw personalizzato.
Il motivo del mio intervento sul forum era però un altro: ho cercato
invano di evitare la distribuzione del file.mdw associato al back-end.
Non ci sono riuscito. In pratica, se declasso l'admin (rimuovendone
tutti i privilegi sulle tabelle), mi è impossibile linkare da codice
le tabelle sul front-end. Viceversa, se concedo all'admin i privilegi
di lettura struttura, le tabelle risultano importabili da qualcunque
mdb. Credo ormai che, salvo smentita (me lo auguro!) di Alessandro
Baraldi, l'argomento sia chiuso. Ringrazio Geppo, l'unico ad essersi
interessato del mio intervento.
Concludo con una mia personale riflessione (sigh!).
Distribuendo il file.mdw si offre l'opportunità all'utente finale di
ispezionarlo. Eseguendo la query MSysUserList viene restituito, in
chiaro, l'elenco degli utenti. Oltre agli utenti di default (admin,
creator, engine), compaiono anche tutti gli altri utenti creati dallo
sviluppatore. E' logico ipotizzare che, fra tutti questi, almeno uno
ha i privilegi di amministratore. Cosa succederebbe se un utente
malintenzionato creasse un nuovo file.mdw, creasse quindi un nuovo
utente con username analogo ad uno degli utenti appena scoperti, gli
concedesse i privilegi di amministratore e aderisse al nuovo file.mdw?
Spero vivamente che non sia come penso...