Newsgroup: it.comp.appl.access
Titolo: Utenti o password

Buongiorno a tutti, mi servirebbe aiuto per proteggere un database da 
scrittura.
Con soluzione semplice di gestione utenti (1 sola lettura e 1 lettura e 
scrittura) oppure con una finestra di popup che chieda una "password"  per 
modificare i dati in caso non venga inserita le modifiche non vengono 
salvate.
Grazie mille, Filippo. 

 ha scritto nel messaggio 
news:gYWhk.6214$Uu1....@news.edisontel.com...

Fino ad Access 2003 era disponibile la gestione della protezione attraverso 
un file di tipo .mdw che avresti potuto impostare attraverso il menu 
Strumenti e poi Protezione. Se hai questa versione di Access (o una 
precedente) credo che, dedicandogli un po' di tempo per apprendere il 
meccanismo, troverai una soluzione più che valida per le tue esigenze.
In Access 2007 so che questa metodologia è stata eliminata, forse perchè è 
stato implementato un metodo migliore, ma non so darti nessun aiuto.
Ciao
Antonio

 ha scritto nel messaggio 
news:4888ba82$0$29968$5fc...@news.tiscali.it...

Utilizzo access 2003. Avevo visto questa funzione ma mi sembra di aver 
capito che è legata all'utente di windows, non potendo avere la certezza di 
quale sia l'utente (se viene aperto in rede da qualsiasi pc) pensavo un 
controllo direttamente sul db, anche solo 2 utenti guest e admin.
Grazie comunque. 

 ha scritto nel messaggio 
news:4jfik.6243$Uu1....@news.edisontel.com...

Se ti riferisci all'utilizzo dell' .mdw sei fuori strada, non utilizza mica 
l'autenticazione di windows.
Sta per i fatti suoi...a tutti gli effetti è un db separato da cui attingi i 
valori...è criptato e sostanzialmente ha già una sorta di gestione gruppi.
In ogni caso il grosso lo devi prevedere sul db principale, perchè è li che 
dovrai gestire le autorizzazioni.
Ciao
-- 
Roberto da Parma 

 ha scritto nel messaggio 
news:48899e04$0$1079$4faf...@reader2.news.tin.it...

Ho capito, allora potrebbe essere una soluzione percorribile. Mi resta 
sempre il dubbio sulla possibilità di "proteggere da password" le modifiche 
ai dati in qualche modo, potrebbe essere una soluzione percorribile o mi 
complico ulteriormente? Come si sarà capito cerco la soluzione più semplice 
per dire a 2 utenti tu leggi solamente i dati tu li leggi e li inserisci, 
qualsiasi soluzione sarebbe accettabile.
Grazie. 

 ha scritto nel messaggio 
news:umlik.6249$Uu1....@news.edisontel.com...

Se diciamo che gli utenti sono solo due e non necessiti implementazione e 
gestione di altri utenti allora la soluzione più veloce e meno traumatica 
sarebbe creare due FE uno con maschere di tipo recorset snapshot (sola 
letture) e uno invece con maschere di tipo dynaset.
In questo modo ti basta duplicare il file che hai creato e cambiare il tipo 
recordset da tutte le maschere.Lo puoi fare anche tramite ciclo in VB se hai 
tante maschere.
 Se il file è usato da entrambi ma vuoi che un utente abbia autorizzazioni e 
l'altro sola lettura allora basta che dopo l'evento accesso da maschera 
login fai girare o meno il codice che ti cambia il tipo recordset sulle 
maschere.
if autorizzato=true then
di seguito ti scrivo il codice per la trasformazione, non ho ancora 
implementato la funzione per evitare l'apertura delle maschere,
prima o poi lo farò...
La proprietà la puoi cambiare con il valore che vuoi sono elencati nella 
guida, guidi puoi usare la stessa per ripassare ad una maschera di 
lettura-scrittura.
Function frmRead()
'Scritto da Arisi Roberto (Roberto da Parma)
'Trasforma il recordset in tipo snapshot (maschera di sola lettura)
    Dim frm As Form, ctr As Container, doc As Document
    Dim obj As AccessObject, dbs As Object, rst As Long
    Set dbs = Application.CurrentProject
    Application.Echo False
    'Apre tutte le maschere
    For Each obj In dbs.AllForms
            DoCmd.OpenForm obj.Name, acDesign
    Next obj
    'Modifica il valore, sostituibile con qualunque altra proprietà
    For Each frm In Forms
        frm.RecordsetType = 2
    Next frm
    'Richiama la funzione che chiude tutte le maschere aperte
    DoCmd.SetWarnings False
        chiudiTutto
    DoCmd.SetWarnings True
    Application.Echo True
End Function
Function chiudiTutto()
'Chiude tutte le maschere
    Dim NumForms As Integer, I As Integer
    NumForms = Forms.count
    For I = NumForms - 1 To 0 Step -1
        DoCmd.Close acForm, Forms(I).Name, acSaveYes
    Next I
End Function


 ha scritto nel messaggio 
news:488b3377$0$18147$4faf...@reader3.news.tin.it...

Ho provato come mi hai detto, ho duplicato tutte le maschere creandone una 
copia in sola lettura (snapshot) e una pure in scrittura (Dynaset) poi 
aggiornando i collegarmenti di tutti i pulsanti alle relative maschere tutto 
ok.
Mi rimane il problema di gestire "l'accesso" alle maschere che permettono la 
"scrittura".
Mi sono perso quando mi dici "Se il file è usato da entrambi ma vuoi che un 
utente abbia autorizzazioni e  l'altro sola lettura allora basta che dopo 
l'evento accesso da maschera login fai girare o meno il codice che ti cambia 
il tipo recordset sulle maschere." Non riesco a capire "evento accesso da 
maschera login" devo creare delle tabelle utenti e una maschera collegata?
Grazie ancora.

 ha scritto nel messaggio 
news:bd%jk.6310$Uu1....@news.edisontel.com...

Quello che noi diciamo in poche righe si traduce in effetti in tante righe 
di codice e tabelle...
In risposta ti dico...certo che devi gestire utenti e password e 
autorizzazioni con una tabella.
Qui andrai a "pescare" i dati al momento del login.
Non è semplice se si vogliono fare le cose fatte bene....
La mia soluzione era quella appunto di darti un file sola lettura e uno 
lettura-scrittura...magari con richiesta di due password diverse 
all'apertura, in questo modo ti evitavi di inoltrarti nella gestione utenti.
Diversamente....buon divertimento


 ha scritto nel messaggio 
news:4890afac$0$40316$4faf...@reader5.news.tin.it...

Ho fatto, mi sembra funzioni tutto bene. Ho inserito una maschera di login 
con richiesta password: se questa è "x" allora mi apre il FE dynaset 
altrimenti mi apre quello snapshot.
Per cambiare agilmente la password o aggiungerne altre contemporaneamente è 
possibile getirle da tabella? qualcosa tipo "se il valore di quel campo di 
quella tabella è x allora..." oppure un flag si/no sugli utenti con 
abilitazioni?
Grazie. 

 utenti e una maschera collegata? Grazie ancora.
Se ti accontenti di una cosa semplice potresti creare una macro denominata 
Autoexec e richiamare da questa una funzione tipo:
function AccessoFrm()
dim vInputBox
vInputBox = inputbox("Inserire la password di accesso:") then
if vInputBox = "Scrittura" then
docmd.openform "FormConAutorizzazionediScrittura"
elseif vInputbox = "Lettura" then
docmd.openform "FormConAutorizzazionediLettura"
else
msgbox"Non sei autorizzato", vbcritical, "Attenzione.................."
docmd.quit
end if
end function
Questo è solo un esempio........se non ti piace la inputbox puoi sempre 
creare una form ed utilizzarla all'avvio.
-- 
Ciao
Geppo


Direi che č perfetta, sicuramente piů pratica di un form; resta perň che 
devo impostare o modificare la password da "codice" non č possibile farla 
associare ad un campo in modo che l'utente con accesso in scrittura possa 
modificarla da maschera?
Grazie. 

 Grazie.
Potresti creare ad es. una tabella "password" con una campo "pwd" tipo testo 
e "TipoAccount" tipo Si\No ed inserire qui le password, poi il codice deve 
essere modificato in questo modo:
Function AccessoFrm()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("password")
Dim vInputbox As String
vInputbox = InputBox("Inserire la password di accesso:")
With rst
.MoveFirst
Do While Not .EOF
If .Fields("pwd") = vInputbox and .fields("TipoAccount") = true Then
   docmd.openform "FormConAutorizzazionediScrittura"
   Exit function
ElseIf .Fields("pwd") = vInputbox and .fields("TipoAccount") = false Then
   docmd.openform "FormConAutorizzazionediLettura"
   exit function
End If
.MoveNext
Loop
End With
MsgBox "Non sei autorizzato.", vbCritical, "Attenzione......"
DoCmd.Quit
End Function
Cosi quanto il campo "TipoAccount" č true l'utente ha diritti in scrittura, 
altrimenti ha diritti di lettura.
Se vuoi permettere all'utente con diritti di scrittura di modificare la 
password, crea un pulsante che apre un eventuale form associata alla tabella 
password, in questo modo potrai modificare password esistenti e/o inserirne 
altre, attribuendogli il valore true se puo' scrivere e false se puň solo 
leggere.
-- 
Ciao
Geppo

"Geppo" <c...@tin.it.invalid> ha scritto nel messaggio 
news:bR3kk.125675$FR.3...@twister1.libero.it...

Va una favola!! Grazie davvero era quello che mi serviva. Beh per voler fare 
le finiture avevo pensato di inserire un controllo "admin" di tipo si/no 
sempre nella tabella password, quindi creato la maschera password e aggiunti 
nel codice il seguente controllo duplicando di fatto l'if precedente:
If .Fields("pwd") = vInputbox And .Fields("admin") = True Then
   DoCmd.OpenForm "password"
   Exit Function
ma mi restituisce un errore nella parte finale " Errore di compilazione  - 
Loop senza do"
devo modificare qualcosa? Grazie ancora. 

 devo modificare qualcosa? Grazie ancora.
-- 
Ciao
Geppo

Ciao Filippo wrote:
----cut---
Se poi vuoi valutare la possibilita' che l'utente possa accidentalmente 
inserire una password sbagliata, pertanto vuoi evitare che si chiuda 
inutilmente il DB, dando la possibilità all'utente di inserirla 
correttamente prova la funzione cosi modificata:
Function AccessoFrm()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("password")
'>===============INIZIO=================<
Dim strmsg As String ' dichiaro la variabile che conterra il messaggio
Dim CountLogin As Byte ' dichiaro la variabile che conterà le volte che 
clikko
'>===============FINE=====================<
Dim vInputbox As String
'>===============INIZIO===================<
reclick:   'etichetta che fara fare il giro
CountLogin = CountLogin + 1 ' creo il contatore
'>===============FINE=====================<
vInputbox = InputBox("Inserire la password di accesso:")
With rst
.MoveFirst
Do While Not .EOF
If .Fields("password") = vInputbox And .Fields("TipoAccount") = True Then
   docmd.openform "FormConAutorizzazionediScrittura"
   Exit Function
ElseIf .Fields("password") = vInputbox And .Fields("tipoaccount") = False 
Then
   docmd.openform "FormConAutorizzazionediLettura"
   Exit Function
'>===================INIZIO=======================<
elseIf .Fields("pwd") = vInputbox And .Fields("admin") = True Then
   DoCmd.OpenForm "password"
   Exit Function
'>===================FINE=========================<
End If
.MoveNext
Loop
End With
'>=====================INIZIO=====================<
If CountLogin < 3 Then
strmsg = "Utente Inesistente" & vbCrLf & "Riprova...!" & vbCrLf & _
          "Hai n° " & 3 - CountLogin & " tentativi."
If MsgBox(strmsg, vbExclamation + vbYesNo, "Attenzione....") = vbNo Then
      GoTo TheEnd
      Else
      GoTo reclick
      End If
Else
         MsgBox "Sono finiti i tentativi" & vbCrLf & " RIPROVA......!" & 
vbCrLf & _
"Hai nr.° " & 3 - CountLogin & " tentativi.", vbExclamation
End If
TheEnd:
'>=====================FINE============================<
MsgBox "Non sei autorizzato.", vbCritical, "Attenzione......"
DoCmd.Quit
End Function
Il codice circoscritto, sono le modifiche apportate.
-- 
Ciao
Geppo 


E' perfetto. L'ultima ciliegina ed è finito. E' possibile mascherare con gli 
asterischi la digirazione nella inputbox?
Credo il comando sia InputMask ma non lo so usare. Grazie. 


No, quello va solo sulle form, per la inputbox è un pò più complicato.
Comunque se vuoi posso inviarti via mail il modulo che dovrai importare nel 
tuo db e poi cambiare il nome della funzione "inputbox" che diventa:
inputboxEX(form_NomeTuaForm.Hwnd, "Inserire la password di accesso:", 
"TITOLO")
-- 
Ciao
Geppo 

"Geppo" <c...@tin.it.invalid> ha scritto nel messaggio 
news:0sekk.125854$FR.3...@twister1.libero.it...

Non ho capito molto bene scusami; con il modulo che mi mandi devo comunque 
appoggiarmi ad un form di inserimento? alla mia email devi aggiungere  .123 
tra nome utente e la @. Grazie. 

"Geppo" <c...@tin.it.invalid> ha scritto nel messaggio 
news:0sekk.125854$FR.3...@twister1.libero.it...

l'email è 
filip...@xxxx.it
 

Ciao Filippo wrote:
 > l'email č 
filip...@xxxx.it
inviato
-- 
Ciao
Geppo 


Grazie.