Condividi tramite

Accesso personalizzato all'utilizzo del Database. Maschera di Login.

Anonimo
2020-02-11T08:31:57+00:00

Buongiorno a tutti.

Ho creato un DB in multiutenza da mettere in rete, l'ho diviso in FE e BE ed ho creato una maschera di login per selezionare le modalità di accesso al mio Database.

Per ora sono riuscito ( tramite il codice sottostante)  a creare delle semplici autorizzazioni inserendo nome utente e password, per poi aprire e permettere di usare il DB in argomento.

Option Compare Database

Private Sub cmdLogin_Click()

On Error Resume Next

If IsNull(Me.txtLogin) Then

        MsgBox "Inserire nome utente", vbInformation, "Nome utente necessario"

        Me.txtLogin.SetFocus

    ElseIf IsNull(Me.txtPassword) Then

        MsgBox "Inserire Password", vbInformation, "Password necessaria"

        Me.txtPassword.SetFocus

    Else

        If Nz(DLookup("Password", "tblLogin", "Login = '" & Me.txtLogin.Value & "'"), "Modalità di accesso") = Me.txtPassword Then

            DoCmd.Close

            MsgBox "Success"

            Application.FollowHyperlink "C:\Users\XXXXXX\Desktop\ProvaNichi.accdb", True ' apre database esterno

            'DoCmd.OpenForm "Master"

        Else

            MsgBox "Nome utente o Password errati"

        End If

    End If

End Sub 

Ciò che chiedo a voi esperti è questo:

  1. come posso abilitare i diversi utenti ad un utilizzo del database creando degli appositi accessi tipo amministratore, utente, utente limitato a determinate maschere e cosi via, voi già avete inteso cosa io voglia dire;

2)come posso creare degli accessi al database più sicuro possibile, in modo che io ( creatore del database )  possa avere sempre in mano la sicurezza e la situazione del database e gestire nel migliore dei modi l'utilizzo del database?

  1. come posso poi creare ed inibire l'accesso al database in un determinato momento ad uno o più utenti connessi al database ( per esempio in una determinata data oppure con un flag ecc... 

Ringrazio come sempre chi mi aiuta in questo.

Ciao Nicola.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2020-02-12T13:35:17+00:00

ciao Nicola.

stai impostando la dlookup sul database corrente e non su quello in cui la tabella login risiede.

Credo sia il caso di considerare l'evento form su apertura e non su corrente, ma non so se sto capendo al meglio e sfruttare il recordset per il match.

Ciao, Sandro.

Option Compare Database

Option Explicit

Private Sub Form_Open(Cancel As Integer)

Dim wrk As DAO.Workspace

Dim db As DAO.Database

Set wrk = DBEngine.Workspaces(0)

Const strDBPath As String = "C:\Users\xx\Desktop\Login e Magazzino.accdb"

Set db = wrk.OpenDatabase(strDBPath)

Dim rsSystem As DAO.Recordset

Dim sSQL As String

'sSQL = "SELECT * FROM LOGIN WHERE USER='" & fOSUserName() & "'"

sSQL = "SELECT user FROM LOGIN  in '" & strDBPath & "' WHERE USER='" & fOSUserName() & "';"

Set rsSystem = db.OpenRecordset(sSQL, 2) 'dbopendynaset

With rsSystem

    .FindFirst "user='" & fOSUserName() & "'"

    If Not .NoMatch Then

            MsgBox "Success"

            Application.FollowHyperlink strDBPath

        Else

            MsgBox "Utente non abilitato!!", vbInformation, "Contattare l'Amministratore."

    End If

    .Close

End With

'exitRoutine:

If Not (db Is Nothing) Then

     Set rsSystem = Nothing

     db.Close

     Set db = Nothing

     DoCmd.Quit

End If

Set wrk = Nothing

End Sub

ps. per quanto alle Api, sarebbe bene dichiarare con compilazione condizionale anche la modalita' 32 bit.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

13 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2020-02-12T07:58:03+00:00

    ciao Nicola,

    argomento gia' trattato in passato a cui personalmente credo di avere poco da aggiungere se non ribadire concetti espressi a piu' riprese.

    La sicurezza dei dati e' direttamente proporzionale al tipo di dati che devi gestire.

    Se si tratta di ricette, forse relativamente basso, se si tratta di informazioni sanitarie di pazienti sicuramente mooolto elevato.

    Nella versione di Access fino alla 2003 esisteva la possiblita' di creare una gestione utenti e gruppi all'interndo del database che consentiva di ottenere esattamente quello che chiedi.

    Dallle versioni successive e' stata deprecata perche' il file mdw che contenete le info degli users and relative password era decisamente violabile.

    Per retrocompabilita' MSFT ha mantenuto la possiblita' di attivare questo tipo di "fallace" protezione da VBA con

     docmd.RunCommand acCmdWorkgroupAdministrator, il resto deve essere programmato da codice.

    Se vuoi impedire l'accesso ai dati non c'e' un modo sicuro lavorando con ACE/JEt, devi cambiare il database.

    Qualsiasi cosa tu faccia non puoi impedire l'accesso ai dati, tasto shit, macro AutoExcec, active directory, maschere di login sono utili forse per i meno smanettoni, ma per utenti esperti, e forse nemmeno troppo, non servono a nulla.

    Il cambio del database non e' cosa semplice, la learning curve e' decisamente impegnativa e non cosi' intuitiva, ci vuole tempo e studio e molta applicazione.

    Generalmente se usi MS-Access il livello di sicurezza che richiedi non e' molto elevato, ma non e' come sembra dallo scenario in cui ti trovi ora.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2020-02-12T07:27:11+00:00

    Buongiorno a tutti, ciao Claudia-C , al bisogno sicuramente prenderò in considerazione il tuo gentile consiglio, fino ad oggi ho sempre ricevuto professionale e puntuale supporto dagli amici di questo bellissimo forum.

    Ciao Mimmo, grazie per il tuo gentilissimo intervento, per la creazione del file ACCDE l'ho già ipotizzato e so come fare.

    Prendendo spunto dal tuo esempio provvedo ad impostare delle autorizzazioni particolari e ti aggiorno, ho già fatto qualcosa, devo integrarlo.

    Per quanto riguarda il 3° punto potrebbe capitare di dover inibire l'accesso anche agli utenti già connessi, come fare in questo modo?

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-02-11T17:47:02+00:00
    1. come posso abilitare i diversi utenti ad un utilizzo del database creando degli appositi accessi tipo amministratore, utente, utente limitato a determinate maschere e cosi via, voi già avete inteso cosa io voglia dire;

    Ciao Nicola,

    puoi realizzare una tabella Profilo ed una tabella Utenti (che forse hai già) in relazione per assegnare a ciascun utente un profilo.

    tblProfili

    Prof_d

    Prof_descrizione

    tblUtenti

    User_Id

    User_Login

    User_Pwd

    User_Prof_Id

    User_DataScadenzaPwd

    2)come posso creare degli accessi al database più sicuro possibile, in modo che io ( creatore del database )  possa avere sempre in mano la sicurezza e la situazione del database e gestire nel migliore dei modi l'utilizzo del database.

    Potresti utilizzare una protezione a livello di shiftKey ad esempio associando ad una combinazioni di tasti (tipo Ctrl+P) una macro tra le  AutoKeys l'attivazione della seguente funzione che apre o chiude il DB. 

    Option Compare Database

    Option Explicit

    Function SetShiftKey()

        Dim cDB As Object, PRP As Variant

        Set cDB = CurrentDb

        On Error GoTo Errore

        Beep

        If cDB.Properties("AllowBypassKey") = True Then

           cDB.Properties("AllowBypassKey") = False

    '       MsgBox "Shift Key Disabled", vbOKOnly

          Else

           If InputBox("Password: ", CurrentDb.Properties("AppTitle")) = "tuaPassword" Then

              cDB.Properties("AllowBypassKey") = True

           End If

    '       MsgBox "Shift Key Enabled", vbOKOnly

           End If

    Chiudi:

        Exit Function

    Errore:

        If Err = 3270 Then

           Set PRP = cDB.CreateProperty("AllowBypassKey", dbBoolean, True)

           cDB.Properties.Append PRP

           Resume Next

           End If

        Resume Chiudi

    End Function

    O creare un DB da distribuire in formato ACCDE (trovi in rete il tutto).

    3) come posso poi creare ed inibire l'accesso al database in un determinato momento ad uno o più utenti connessi al database ( per esempio in una determinata data oppure con un flag ecc...

    Utilizzando un flag puoi inibire nuovi accessi ma eventuali utenti già connessi? 

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-02-11T16:14:27+00:00

    Ciao Nichicanta,

    ci scusiamo per il ritardo della risposta ma siamo qui per aiutarti con Access.

    Nel tuo messaggio ci dici di aver creato un Database  in multiutenza da mettere in rete e di essere riuscito a creare delle autorizzazioni ma che hai bisogno di creare accessi sicuri al database per altri utenti e di avere anche gestione per inibire gli accessi.

    Per questo motivo vorrei suggerirti di pubblicare la tua domanda sul forum dedicato ad Access che puoi trovare qui.

    Voglio informarti che il forum è disponibile in lingua inglese e per questo ti lascio il traduttore di Bing per un supporto nella traduzione.

    Siamo certi che in breve tempo gli esperti e gli utenti del forum saranno in grado di darti suggerimenti e indicazioni utili per procedere nella maniera da te desiderata.

    Spero che questo ti possa essere di aiuto ma ricorda che siamo qui per ogni altro dubbio o domanda,

    Claudia

    La risposta è stata utile?

    0 commenti Nessun commento