REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

di il
26 risposte

26 Risposte - Pagina 2

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    15/08/2023 - fratac ha scritto:


    Domanda.

    Ma lo hai testato il database che hai condiviso?

    Non funziona nulla.

    il select count non funziona come presubilmente pensi.

    Non ti estrae il valore della prima colonna filtrata in base alla where condition. Restituisce solo il numero di righe di una determinata colonna.

    Ad esempio. Quante persone con età uguale a 74 anni sono presenti nella prima colonna della tabella Soci?

    Ti restituirà il numero totale di persone con età 74 anni presenti in tabella.
    E non il nome della prima persona che trova.

    Hai nidificato così tanti if else if che sono chiusi anche male. Non ti genera errori, perchè i tag di apertura e di chiusura sono di pari numero, ma sono chiusi male.
    Non hai attivato l'option explicit, quindi ad ogni minima distrazione ti si generano errori difficilmente individuabili.

    Assegni un valore testo ad una variabile numerica.

    Non c'è logica nella scrittura del codice e sinceramente non ho capito nemmeno la logica nell'approccio a quello che vuoi realizzare.

    Questa sintassi
    If IsNull(rs(0)) = False 

    non ha senso e non funzionerà mai.

    Mi dispiace, e non lo dico per offendere, ma siamo lontani anni luce dall'ottenere l'effetto sperato.
    E sinceramente trovo difficile che si riesca ad aiutarti tramite il forum.

    Ps. non c'è bisogno del file di testo con le credenziali di accesso. Sono visibili dalle tabelle.

    certo, testato e funzionante…almeno per quella parte.

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    16/08/2023 - By65Franco ha scritto:


    15/08/2023 - fratac ha scritto:


    Mi dispiace, e non lo dico per offendere, ma siamo lontani anni luce dall'ottenere l'effetto sperato.

    Si purtroppo devo concordare ancora una volta con quanto esposto…


    joker88 ti consiglio di non perderci troppo tempo perchè se non si hanno gli strumenti e le conoscenze è molto difficile che ne vieni fuori.

    Del resto non puoi aspettarti che qualcun altro faccio il lavoro al posto tuo. 
    Questo non si può fare.
    Si discute di soluzioni e di tecniche, di approcci e possibili soluzioni, ma per il resto devi essere tu all'altezza di capire e realizzare quanto suggerito nella discussione precedente e questa attuale.

    Purtroppo, se posso permettermi, non hai la possibilità di farcela e deduco ciò in quanto le risposte e le soluzioni con tutti i pro e i contro ti sono stati ben forniti nel corso dei vari post.

    Senza offesa ma per darti un semplice consiglio, ora come ora è meglio se non affronti tale soluzione… se poi rileggi i post della precedente discussione vedi come può essere molto divisivo tale argomento dove taluni dicono certe cose e altri ne dicono altre… chi con saggezza e chi senza sapere o disconoscere la materia fino in fondo… e in più senza conoscere il progetto in questione etc etc etc … ti dico questo per farti capire che non esiste una soluzione che sia la SALUZIONE… esistono alcune tecniche che devono essere padroneggiate con il sapere e una certa professionalità.

    Quindi se non hai tali requisiti ti sarà impossibile, almeno per adesso, affrontare tale argomento e mettere in pratica le soluzioni che ti sono state date. E ripeto, non puoi aspettarti che qualcuno faccia il lavoro al posto tuo. Non è questo il sistema o per lo meno non è previsto in tale forum.

    Capisco che ti tornerebbe comodo fare un copia incolla, ma devi anche capire che non puoi affrontare questo particolare argomento in questi termini. 


    Mi raccomando, prendi ciò che ti ho appena detto come un consiglio (anche se non richiesto) da amico… poi quando avrai gli strumenti adatti capirai come e se applicare le varie soluzioni che ti abbiamo dato e potrai discernere tra le varie ipotesi in modo consapevole.

    ;-)   …ti ripeto, MsAccess non prevede tale gestione e pertanto non esiste “la SOLUZIONE” ma devi tecnicamente studiare i possibili approcci più adatti al progetto e alle tue esigenze.

    Mi spiace parlarti in questi termini e mi auguro non sia motivo di offesa, ma piuttosto uno stimolo per guardare avanti e continuare a progettare con MsAccess al fine di acquisire conoscenze ed esperienze.

    nessuna offesa e nessuna pretesa che qualcuno mi tiri fuori il prodotto realizzato, allegavo più che altro per far capire cosa avevo già fatto.

    grazie per i suggerimenti

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    16/08/2023 - amorosik ha scritto:


    15/08/2023 - joker88 ha scritto:


    Non riuscendo a riaprire la discussione Limitare visualizzazione dati tabella in base ad utente loggato, chiusa, provo ad aprire un nuovo argomento richiamando la precedente discussione, spero di non sbagliare.

    Ho provato ad eseguire i suggerimenti forniti, tuttavia al login non riesco ancora a limitare la visualizzazione dei soli dati associati all'utente loggato.

    ho caricato qui database il db con un file txt in cui sono riportate le utenze di test create, se qualcuno volesse visualizzare quanto fatto.

    grazie mille per il supporto.

    Vedo che usi una variabile id_utente_loggato come globale, io terrei anche la password ed il livello di sicurezza su variabili globali sempre disponibili al codice, una volta passato il login e' comodo averle sempre sottomano piuttosto che andare sempre sul db

    Poi, in seguito alla schermata login vedo che vai su una ‘inserimentodati’, non mi e' ben chiaro il motivo

    Io andrei su una form con la lista/elenco dei dati attualmente visibili all'utente, nel caso di un admin allora vedrai tutte le righe della tabella Assegnazioni, e da questa form se premi AGGIUNGI/NUOVO allora potresti mostrare una form di dettaglio con tutti i campi presenti nella tabella ed inserire un nuovo record

    In sostanza la prima form, la lista solo in visualizzazione, niente modifiche, se premi NUOVO allora apri la form frmAssegnazioniInserimentoModifica e da questa puoi aggiungere un nuovo record, quando premi SALVA puoi aggiornare il nuovo record coi campi presenti sulle textbox, aggiornare il recordset della sottostante frmAssegnazioniElenco (perche' deve mstrare il record appena aggiunto) e poi ‘spegnere’ la frmAssegnazioniInserimentoModifica

    provo a seguire questa soluzione, grazie!

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    16/08/2023 - joker88 ha scritto:


    certo, testato e funzionante…almeno per quella parte.

    non per fare il pignolo ma nel tuo codice c'è scritto:

    Dim UserLevel As Integer
    .....
    If txtPassword.Value = pwd Then
        'password corretta
        UserLevel = estrai_campo_stringa("select sicurezza from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
        id_utente_loggato = estrai_campo_numerico("select loginid from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
        If UserLevel = 1 Then
         DoCmd.OpenForm "InserimentoDati"
         DoCmd.Close acForm, "LoginPassword"
         .....

    come si vede da questa immagine, il campo sicurezza, contiene un valore stringa.

    quindi in questa istruzione passi un valore stringa ad una variabile dichiarata come integer

    Dim UserLevel As Integer
    UserLevel = estrai_campo_stringa("select sicurezza from tablogin....

    essendo la parte dove confronti le credenziali di accesso con successiva autorizzazione all'uso del database, mi spieghi come può essere funzionante?

    Non ti genera errore, perchè questa porzione di codice non verrà mai eseguita, perchè a monte, come condizione primaria di tutti i successi if nidificati all'interno, c'è questo codice di confronto

     If estrai_campo_numerico("select count(*) from tablogin where login='" & txtLoginID.Value & "'") Then
      'esiste l'utente
      pwd = estrai_campo_stringa("select password from tablogin where login='" & txtLoginID.Value & "'")

    che risulterà sempre falso, sia per l'uso di count, sia per il fatto che estrai tutti i campi della tabella senza fare nessun confronto.

    E questo codice è contenuto nel database che hai condiviso.

    Private Sub Comando1_Click()
    Dim UserLevel As Integer
    Dim pwd As String
    Dim TemPass As String
    Dim ID As Integer
    If IsNull(Me.txtLoginID) Then
     MsgBox ("Inserire Login"), vbInformation, "Richiesto Login"
     Me.txtLoginID.SetFocus
    ElseIf IsNull(Me.txtPassword) Then
     MsgBox ("Inserire Password"), vbInformation, "Richiesta Password"
     Me.txtPassword.SetFocus
    Else
     If estrai_campo_numerico("select count(*) from tablogin where login='" & txtLoginID.Value & "'") Then
      'esiste l'utente
      pwd = estrai_campo_stringa("select password from tablogin where login='" & txtLoginID.Value & "'")
      If pwd = "Password" Then
       'sono entrato con la password momentanea
        If pwd <> txtPassword.Value Then
         MsgBox "Attenzione la Password momentanea non coincide"
         txtPassword.Value = ""
         txtPassword.SetFocus
         Exit Sub
        End If
        id_utente_loggato = estrai_campo_numerico("select loginid from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
        MsgBox ("Per favore cambiare Password"), vbInformation, "Nuova Password"
        DoCmd.OpenForm "CambiaPassword", , , "[LoginID] = " & ID
        DoCmd.Close acForm, "LoginPassword"
      Else
       If txtPassword.Value = pwd Then
        'password corretta
        UserLevel = estrai_campo_stringa("select sicurezza from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
        id_utente_loggato = estrai_campo_numerico("select loginid from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
        If UserLevel = 1 Then
         DoCmd.OpenForm "InserimentoDati"
         DoCmd.Close acForm, "LoginPassword"
        Else
         id_utente_loggato = estrai_campo_numerico("select loginid from tablogin where login='" & txtLoginID.Value & "' and password='" & txtPassword.Value & "'")
         DoCmd.OpenForm "TabLogin"
         DoCmd.Close acForm, "LoginPassword"
       End If
      Else
        MsgBox "Attenzione Password Errata"
        txtPassword.Value = ""
        txtPassword.SetFocus
        Exit Sub
       End If
      End If
     Else
      MsgBox "Attenzione utente non codificato"
      txtLoginID.Value = ""
      txtLoginID.SetFocus
      Exit Sub
     End If
    End If
    
    End Sub

    ed eseguendo questo codice appare sempre il messaggio:

    "Attenzione utente non codificato"

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    16/08/2023 - fratac ha scritto:


    non per fare il pignolo ma nel tuo codice c'è scritto:

    Pure io non vorrei fare il pignolo… 

    ma una gestione password dovrebbe prevede almeno:

    • lunghezza minima
    • uso di almeno un carattere
    • uso di almeno un numero
    • uso di almeno un carattere speciale 
    • data di scadenza
    • password già utilizzata in precedenza
    • e che non sei un robot non ce lo vogliamo mettere ?  
    • etc etc etc …

    (scerzoooo…. era solo per pignoleria e per dare un consiglio)   ;-))

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    17/08/2023 - By65Franco ha scritto:


    (scerzoooo…. era solo per pignoleria e per dare un consiglio)

    Naturalmente scherziamo, ma diciamo solo cose vere e stiamo dando consigli su come costruire al meglio un sistema “sicuro”

    Che come detto, non sarà mai un sistema sicuro, ma comunque che renderebbe difficile l'accesso a chi non mastica a certi livelli l'uso di access.

    Allo stato attuale basta il tasto SHIFT.

    E comunque il tasto SHIFT è possibile disabilitarlo, quindi si alzerebbe il livello di difficoltà, rimane però la ribbon di access dove non è del tutto agevole disabilitare la voce di meù file che permette l'accesso alle proprietà del database ed una volta che hai accesso alle proprietà, puoi fare tutti i porci comodi, compresa l'attivazione del tasto shift o la disibilitazione di tutti gli autoexc e dei form di caricamento.

    Ma facendo un lavoro di fino, si può mutare anche la ribbon, anche se bisogna avere una certa conoscenza avanzata di xml.

    Ma anche fatto questo, rimane il fatto che la Ribbon è gestita in via prioritaria dal pacchetto office, quindi operando con word o excell, in linea teorica è possibile aggirare le impostazioni di access. Ma in questo caso bisogna essere veramente esperti del pacchetto office. Quindi la ritengo una via difficilmente praticabile.

    quello che invece è fondamentale già da subito limitare sono i tentativi di accesso.

    Ora come ora, un brute force, impiegherebbe tra il mezzo secondo ed  i 3 secondi per bucare tutto il sistema.

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    17/08/2023 - fratac ha scritto:


    quello che invece è fondamentale già da subito limitare sono i tentativi di accesso.

    Esempio : 3 tentativi e ti butto fuori ?

    basterebbe aggiungere un booleano per bloccare IdUser dopo 3 tentativi consecutivi falliti.   ;-)

    A quel punto solo Admin può sbloccare l'utente, etc etc etc 

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    Come si fa a comunicare direttamente con un utente o un amministratore del forum?

    Sto provando a cliccare sopra il nominativo o il piccolo logo sul nome utente, ma non riesco a trovare il classico "invia all’utente"

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    19/08/2023 - amorosik ha scritto:


    Come si fa a comunicare direttamente con un utente o un amministratore del forum?

    I messaggi privati in questo forum non sono disponibili. Per ricevere supporto invece puoi scrivere all'assistenza:

    https://www.iprogrammatori.it/contatti/

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    Non posso verificare il codice (non ho access e lavoro di ricordi) ma prova ed eventualmente aggiusta in base agli errori.

    scusate la ruggine nel codice.

    Public Sub GetUser()
     
       Dim dbs As DAO.Database 
       Dim qdf As DAO.QueryDef 
       Dim strSQL As String 
       Dim UserLevel As Integer
       Dim loggato As Integer
    
       Set dbs = CurrentDb 
       strSQL = strSQL = "SELECT * FROM TabLogin WHERE login=Me.txtLoginID and Password=Me.txtPassword;"
       Set qdf = dbs.CreateQueryDef("verificalogin", strSQL) 
       loggato = 0
       UserLevel = 0
       if (qdf("password")=Me.txtPassword) and (qdf("login")=Me.txtLoginID) then
          loggato = 1
       If (qdf("sicurezza")="admin") then
          UserLevel = 1 
       if loggato=0 then 
          MsgBox "Attenzione utente o password errate!"
       ecc... ecc...
    End Sub
    

    prima di qualsiasi operazione dovrai verificare i  permessi.

    facci sapere.

  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    strSQL = strSQL = "SELECT * FROM TabLogin WHERE login=Me.txtLoginID and Password=Me.txtPassword;"

    suggerisco:

    strSQL = "SELECT * FROM TabLogin WHERE login=" & Me.txtLoginID & " and Password='" & REPLACEW(Me.txtPassword,"'","''") & "';"

    Mi chiedo perchè usare CreatQueryDef e non aprire semplicemente un Recordset…?

    Dim rs	As DAO.Recordset
    rs=DbEngine(0)(0).OpenRecordset(strSQL,dbReadOnly,dbOpenSnapShot)
    .... bla bla bla...
  • Re: REOPEN Limitare visualizzazione dati tabella in base ad utente loggato

    21/08/2023 - @Alex ha scritto:


    Mi chiedo perchè usare CreatQueryDef e non aprire semplicemente un Recordset…?

    Per via della ruggine :)

    Vedendo tutto quel codice per un semplice login utente mi sono mosso a compassione…

    In ogni caso avevo fatto la premessa…

Devi accedere o registrarti per scrivere nel forum
26 risposte