Newsgroup: it.comp.appl.access
Titolo: Considerazioni sulla protezione a livello utente.

L'idea era quella di usare un paio di tabelle allo scopo di tenervi i dati
necessari alla protezione del database. Principalmente: una tabella per un
seriale (ma non è fondamentale perchè il seriale stesso può stare anche solo
nel registry), ed una per contare i giorni del "periodo di prova".
Così, ad ogni avvio dell'applicativo controllo sia il seriale, sia la
tabella contatore e decido di conseguenza.
Ciò, tuttavia e nell'ipotesi che le tabelle non siano normalmente
accessibili, comporta il preventivo rilascio delle autorizzazioni di
lettura-scrittura sulle tabelle stesse e, poi, il loro ritiro con un codice
grosso modo simile a questo:
Sub RevokePerm(a As String)'"a" è il nome della singola tabella
    Dim catDB As New ADOX.Catalog, varObjName, lngObjectType As
ADOX.ObjectTypeEnum
    Dim strGroup As String, strUser As String, strGroup1 As String
    strGroup = "Admins"
    strGroup1 = "Users"
    strUser = "user"
    varObjName = a
    lngObjectType = adPermObjTable
    With catDB
        ' Open Catalog object by using connection to current database.
 'apre l'oggetto Catalog usando la connessione corrente
        .ActiveConnection = CurrentProject.Connection
        ' Revoca tutti i permessi.
        .Groups(strGroup).SetPermissions varObjName, lngObjectType, _
            adAccessSet, adRightNone
        ' Revoca tutti i permessi.
        .Groups(strGroup1).SetPermissions varObjName, lngObjectType, _
            adAccessSet, adRightNone
        'Remove all permissions.
        .Users(strUser).SetPermissions varObjName, lngObjectType, _
            adAccessSet, adRightNone
    End With
    Set catDB = Nothing
End Sub
Ora, se sostituisco me stesso all'"amministratore" (togliendolo dal gruppo
Admins) e, quindi, creo un utente con nessun privilegio sulle tabelle
suddette è evidente che quando apro il database con il nome di quell'utente
tutto quanto sopra non funziona più perché l'utente stesso non ha i
privilegi sufficienti per far funzionare "SetPermissions".
Del resto, se permetto al cliente un accesso come membro del gruppo
"Amministratori", egli potrà sproteggere le tabelle in qualsiasi momento.
Non se ne esce.
O sì? Esiste la possibilità, da codice, di bypassare tutto ciò?
Grazie e scusate la lunghezza del post.

 Grazie e scusate la lunghezza del post.
Scusa la domanda:
"Perchč non gestisci tutto tramite il Registry ...?"
Se cripti la key non č la stessa cosa...?
Mi sfugge qualcosa nelle tue consideazioni.
Hai diviso FE e BE...?(Struttura Client-Server)
Se si il Client(FE) č distribuibile in MDE, pertanto essendo 
Metacompilato puņ contenere i riferimenti al Registry in modo
esplito ed effettuare un check all'avvio sia dei giorni che
di quello che credi, ad esempio non lasciare le tabelle Linkate,
ma le cancelli ad ogni chiusura e prima di Relinkarle controlli
all'avvio i giorni residui....!
Ho sparato non avendo ben compreso quello che devi fare.
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Il mio problema è un altro. Se, infatti e da amministratore, rendo alcune
tabelle inaccessibili ad un non-amm/ore queste rimangono tali anche nel
database diviso e/o nell'MDE.
In particolare, ho una maschera che si apre all'avvio e che controlla sia il
registry, sia il contatore. Per fare questo, la maschera deve aprire le
relative tabelle, una o tante che siano. Ma se ho avuto accesso come
non-amm/ore non le può aprire e, infatti, Access genera il msg di errore
(run-time 
2147217887
).
In modo più esplicito il mio codice lavora così:
Private Sub Form_Open(Cancel As Integer)
    Dim cnx As ADODB.Connection, conta As Long, anni As Integer, adesso As
Integer
    Dim cmd As ADODB.Command, rsConta As New ADODB.Recordset
    Set cnx = CurrentProject.Connection
    Set cmd = New ADODB.Command
        Call GrantPerm("CONTATORE")     '<---------- errore
        Set cmd = New ADODB.Command
             rsConta.Open "SELECT CONTATORE.* FROM CONTATORE",
CurrentProject.Connection, adOpenKeyset, adLockOptimistic
             conta = rsConta.RecordCount
             Set cmd.ActiveConnection = cnx
             cmd.CommandType = adCmdText
             cmd.CommandText = "INSERT INTO CONTATORE " & _
                                               "(ID, DATA) VALUES (""" &
(conta + 1) & """, Now());"
             cmd.Execute
             Set cmd = NothingEnd Sub
Perdona la mia pochezza J ma questa cosa mi sta procurando il mal di
stomaco.
A parte questo, come faccio ad evitare il linkaggio delle tabelle nel BE? E
a relinkarle al riavvio successivo?
Grazie in anticipo.

 Grazie in anticipo.


Per il mometo ti ringrazio molto. Mi metto al lavoro e ti faccio sapere :)