Compatta Database con protezione a livello Utente

di il
4 risposte

Compatta Database con protezione a livello Utente

Cercando di migliorare la sicurezza del mio Database, in seguito a qualche osservazione fatta in altre discussioni e dopo aver letto un po' in rete, ho provato ad impostare la sicurezza a livello utente di Access, al fine creare un nuovo utente con i diritti di amministratore e declassare poi l'utente "admin".
Dopo molti tentativi e svariate prove, sono riuscito a trovare una combinazione di autorizzazioni che consente di evitare la manomissione dall'esterno e contemporaneamente far funzionare il mio Front-End come voglio.
Mi sono imbattuto in un problema però, la compattazione del Database. Avendo tolto ad "admin" l'accesso esclusivo al Database, Access non compatta più il file ne alla chiusura ne in altro modo.
Qualcun sa dirmi se esiste un modo per aggirare il problema e far compattare il file, pur negando l'accesso esclusivo ad "admin" (perché altrimenti il file è alterabile dall'esterno) e non distribuendo il file .mdw?
Ringrazio chiunque vorrà darmi indicazioni.

4 Risposte

  • Re: Compatta Database con protezione a livello Utente

    Le nuove versioni non lo consentono se non ricordo male... tant'è che nella Versione 2010 non trovo la proprietà SystemDB, indispensabile...

    Puoi usare un Membro Nascosto che è un Priate Engine, usato solo per azioni come queste... oppure istanzi un DbEngine standard...

    Vado MOLTO a spanne, perchè sono codici vecchi di Oltre 10 anni che non posso testare... ma il senso è questo:
    
    Private loDBEngine As DAO.PrivDBEngine
    Private loWs As DAO.Workspace
    ...
    
    Set loDBEngine = New PrivDBEngine
    loDBEngine.SystemDB = "C:\Percorso\File.MDW"
    loWs = loDBEngine.CreateWorkspace("#default#", strUserName, strPass)
    loDBEngine.CompactDatabase(SrcName As String, DstName As String, [DstLocale], [Options], [SrcLocale])
    Credo possa andare solo fino ad A2003.
  • Re: Compatta Database con protezione a livello Utente

    Non sottovaluterei anche questa semplicissima Opzione di SCRIPT:
  • Re: Compatta Database con protezione a livello Utente

    Ciao Alex, grazie per la risposta veloce. Farò dei test per vedere se funziona.
  • Re: Compatta Database con protezione a livello Utente

    Ciao Alex, ho eseguito un po' di prove e devo dire che il tuo suggerimento è stato veramente risolutivo.

    @Alex ha scritto:


    Le nuove versioni non lo consentono se non ricordo male... tant'è che nella Versione 2010 non trovo la proprietà SystemDB, indispensabile...

    Puoi usare un Membro Nascosto che è un Priate Engine, usato solo per azioni come queste... oppure istanzi un DbEngine standard...

    Vado MOLTO a spanne, perchè sono codici vecchi di Oltre 10 anni che non posso testare... ma il senso è questo:
    
    Private loDBEngine As DAO.PrivDBEngine
    Private loWs As DAO.Workspace
    ...
    
    Set loDBEngine = New PrivDBEngine
    loDBEngine.SystemDB = "C:\Percorso\File.MDW"
    loWs = loDBEngine.CreateWorkspace("#default#", strUserName, strPass)
    loDBEngine.CompactDatabase(SrcName As String, DstName As String, [DstLocale], [Options], [SrcLocale])
    Credo possa andare solo fino ad A2003.
    Sebbene io stia usando Access 2010, il membro nascosto "PrivDBEngine" funziona a meraviglia, anche senza specificare il "SystemDB". Però, ho dovuto modificare la routine per farla funzionare. Guardando un po' in rete, ho scritto il seguente codice:
    
    Function CompattaDBconSicurezzaLivUtente()
    Dim PrvDbe As PrivDBEngine
    Dim strDBOrigine as String, strDBComp as String
    
    strDBOrigine = "C:\Percorso\DBdaCompattare.mdb"
    strDBComp= "C:\Percorso\DBCompattato.mdb"
    
    Set PrvDbe = New PrivDBEngine
    
    With PrvDbe
          .SystemDB = "C:\Percorso\File.MDW" ' Facoltativo, io non l'ho specificato
          .DefaultUser = "admin"
          .DefaultPassword = ""
          .CompactDatabase strDBOrigine, strDBComp
    End With
    
    Set PrvDbe = Nothing
    
    End Function
    Naturalmente, questa routine può essere implementata inserendo l'effettuazione di una copia di Back-up del file da compattare, da ripristinare in caso si verifichino errori, e la gestione dei file da cancellare, una volta compattato il Database.

    @Alex ha scritto:


    Non sottovaluterei anche questa semplicissima Opzione di SCRIPT:
    Anche tramite l'utility "Jetcomp" il Database viene compattato ed il tutto è gestibile da codice VBA.
    Alla fine, tra le due possibilità, ho scelto la prima soluzione. Ho modificato la routine di compattazione, che si trova in un altro Database di servizio e che compatta il Database principale quando necessario, sostituendo al "JRO.JetEngine" il "PrivDBEngine".
    Grazie mille ancora.
Devi accedere o registrarti per scrivere nel forum
4 risposte