Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615

    Vorrei che solo la mia applicazione potesse accedere al suo database...

    Buonasera a tutti.

    Immaginate di creare un'applicazione multiutente in C# 2005; avete tenuto molto alla sicurezza ed avete creato per ciascun utente un sistema di criptazione della sua password.

    Ma chi vorrebbe leggere i dati del relativo database potrebbe farlo anche senza bisogno della password, gli basterebbe entrare nel database dal Sql Server e guardarsi direttamente le tabelle e così aggirerebbe facilmente il sistema che avete creato.

    Io vorrei fare in modo che, senza eccessive complicazioni (preciso che sui computer dove l'applicazione dovrà girare la mia applicazione installerà, prima di installare se stessa, il motore Sql Server 2005 Express e poi ricreerà il database eseguendo il relativo script, tutto qui), l'utente non possa accedere al database del mio programma se non usando quest'ultimo.

    E se non chiedo troppo vorrei anche fare in modo che:
    1) Non possa accedervi in modo 'diretto' nemmeno quando la mia applicazione è in funzione - pensate che l'utente che sta usando il mio programma potrebbe dover vedere solo alcuni dati ed altri invece no - ;
    2) Non possa accedervi in modo diretto nemmeno se il database è su un computer diverso da quello dell'applicazione - pensate ai programmi in una piccola rete - ;
    3) Non possa accedervi in modo diretto nemmeno se si logga al computer ove il database è situato come amministratore del computer - mi sa che qui chiedo davvero troppo - ;

    Cosa mi suggerite? Grazie a tutti.
    Shadow

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Vorrei che solo la mia applicazione potesse accedere al suo database...

    Allora ... prima di tutto ti consiglio di inserire *sempre* il linguaggio nel titolo ... e anche di usare un titolo piu' breve e significativo (non serve scrivere vorrei ... ma che so, "criteri di accesso al db") ...

    Per il tuo problema ...

    Originariamente inviato da Shadow976
    Ma chi vorrebbe leggere i dati del relativo database potrebbe farlo anche senza bisogno della password, gli basterebbe entrare nel database dal Sql Server e guardarsi direttamente le tabelle e così aggirerebbe facilmente il sistema che avete creato.
    In genere, si presuppone che il database sia installato su un server su cui nessuno puo' accedere direttamente.

    E in genere, l'accesso ad un database SQL Server e' mediato da una utenza e password che NON sono gestite dall'applicazione ma dallo stesso DBMS o da un dominio Active Directory.

    Io vorrei fare in modo che, senza eccessive complicazioni (preciso che sui computer dove l'applicazione dovrà girare la mia applicazione installerà, prima di installare se stessa, il motore Sql Server 2005 Express e poi ricreerà il database eseguendo il relativo script, tutto qui), l'utente non possa accedere al database del mio programma se non usando quest'ultimo.
    Questo NON e' semplicemente possibile se l'utente e' anche amministratore del sistema.
    Perche' in questo caso avra' completo accesso al DBMS che e' installato sulla stessa macchina.

    E se non chiedo troppo vorrei anche fare in modo che:
    1) Non possa accedervi in modo 'diretto' nemmeno quando la mia applicazione è in funzione - pensate che l'utente che sta usando il mio programma potrebbe dover vedere solo alcuni dati ed altri invece no - ;
    Vedi risposta precedente.

    2) Non possa accedervi in modo diretto nemmeno se il database è su un computer diverso da quello dell'applicazione - pensate ai programmi in una piccola rete - ;
    Questo e' possibile dato che potrebbe essere solamente il programma, con un utente e una password interna, l'unico ad essere abilitato (come ti ho detto prima) ad accedere al DB.

    3) Non possa accedervi in modo diretto nemmeno se si logga al computer ove il database è situato come amministratore del computer - mi sa che qui chiedo davvero troppo - ;
    Infatti ... chiedi troppo ... e se qualcuno dovesse assolutamente intervenire sul db, se non puo' farlo l'amministratore, che succede?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Grazie infinite e scusa per le imperfezioni nel post, terrò presente per il futuro. Ecco le conclusioni che ho tratto dal tuo messaggio (correggimi se sbaglio):

    1) L'admin di un server ma anche di un pc singolo deve accedere ovunque, quindi anche al database. Questa non è una violazione della privacy, in quanto è un potere che discende dal suo ruolo 'supervisore' ed addetto alla manutenzione del sistema. Questo non è un problema di cui, da un punto di vista giuridico, deve occuparsi il programmatore: sarà l'azienda eventualmente a far sottoscrivere al proprio admin una sorta di 'impegno di riservatezza' o qualcosa del genere;

    2) In un pc client il problema non si pone. Se esistono più utenti per il mio software, esisteranno presumibilmente anche più utenti per quel pc e quindi per forza anche un admin. Ovviamente i singoli utenti non dovranno avere poteri di admin. (nb questo discorso non c'entra con userid e password degli utenti del pc: nella mia applicazione i dati di accesso utenti saranno diversi da quelli del computer! Lo preciso perché so che alcune applicazioni 'associano' ai loro utenti anche quelli del sistema operativo);

    3) In un programma client - server il problema non si pone: ogni server ha un suo amministratore. Gli utenti normali di solito non accedono al server;

    Se non ho detto cavolate, mi sorge un dubbio. Io nelle mie piccole win appl in c# 2005 che si collegavano ai relativi database ho sempre impostato stringe di connessione senza password; mi conviene invece cambiare filosofia e creare una userID ed una password quando creo tale stringa per rendere il tutto più sicuro? Ovviamente immagino che tale account presente nella stringa di connessione e l'eventuale account che l'amministratore imposterà su Sql Server 2005 Express saranno del tutto autonomi, ovvero se l'admin cambia la password al suo account di accesso al Sql Server 2005 Express, la mia stringa di connessione continuerà a funzionare giusto?

    Grazie di nuovo! Mi sa che stanotte la passo sui libri.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Shadow976
    1) L'admin di un server ma anche di un pc singolo deve accedere ovunque, quindi anche al database. Questa non è una violazione della privacy, in quanto è un potere che discende dal suo ruolo 'supervisore' ed addetto alla manutenzione del sistema. Questo non è un problema di cui, da un punto di vista giuridico, deve occuparsi il programmatore: sarà l'azienda eventualmente a far sottoscrivere al proprio admin una sorta di 'impegno di riservatezza' o qualcosa del genere;
    Corretto ... una azienda di un certo livello che prevede la figura dell'amministratore dei sistemi o della rete, ripone comunque una estrema fiducia negli amministratori.

    Originariamente inviato da Shadow976
    2) In un pc client il problema non si pone. Se esistono più utenti per il mio software, esisteranno presumibilmente anche più utenti per quel pc e quindi per forza anche un admin. Ovviamente i singoli utenti non dovranno avere poteri di admin. (nb questo discorso non c'entra con userid e password degli utenti del pc: nella mia applicazione i dati di accesso utenti saranno diversi da quelli del computer! Lo preciso perché so che alcune applicazioni 'associano' ai loro utenti anche quelli del sistema operativo);
    Sì ... e' normale associare l'userid usato per il login (con Active Directory o altro ...) a quello per l'accesso al DBMS (in modalita' Trusted ...). E' molto utile e abbastanza sicuro.
    In realta' io ti CONSIGLIO questo tipo di modalita' ...

    Originariamente inviato da Shadow976
    3) In un programma client - server il problema non si pone: ogni server ha un suo amministratore. Gli utenti normali di solito non accedono al server;
    Non confondere l'architettura client-server di un programma con quella dei sistemi su cui gira l'applicazione. Un programma client-server puo' girare tranquillamente su una sola macchina (in questo caso si parla di funzionalita' client e server). Se queste funzionalita' sono affidate in via esclusiva ad hardware diversi, allora siamo nella condizione di cui parli.

    Originariamente inviato da Shadow976
    Se non ho detto cavolate, mi sorge un dubbio. Io nelle mie piccole win appl in c# 2005 che si collegavano ai relativi database ho sempre impostato stringe di connessione senza password; mi conviene invece cambiare filosofia e creare una userID ed una password quando creo tale stringa per rendere il tutto più sicuro?
    Per rendere tutto piu' sicuro, devi indicare nella stringa di connessione la modalita' Trusted.
    In questo modo, utenza e password di Windows (dell'AD in particolare) viene passato al DBMS in maniera sicura. Non girano password in chiaro, si usa la password una sola volta al login sul PC.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Tutto, della tua lunghissima risposta, mi è stato chiarissimo, tranne le due piccole questioni che ti riporto sotto. un'altro dubbio si avvia a completa soluzione grazie alle tue indicazioni di enorme utilità. lo dico senza retorica perché anche comprando molti libri e studiando a volte serve qualcuno che ti indirizzi su 'cosa' esattamente studiare per giungere ai tuoi scopi.

    1. seguirò il tuo consiglio sull'associare i dati di accesso al sistema operativo anche al mio programma. la mia considerazione si riferiva all'accesso non al database da parte del mio programma, ma all'accesso al mio programma dall'utente, per il quale alcuni programmi associano le stesse credenziali del s.o., mi confermi invece che tutte le tue considerazioni e quindi anche i tuoi consigli si riferivano al solo accesso al database dal programma e non all'accesso al programma da parte dell'utente, che avrà cosi user e password libere e indipendenti da quelle del s.o.?

    2. ieri sera ho studiato a lungo sul mio nuovo libro in merito al particolare utente sql server di cui parli ed ho visto che ha i massimi poteri sul sql server. benissimo per la stringa trusted, farò come dici tu. ma in modo trusted quali user e password dovrei creare? se associo le credenziali di accesso al s.o. allora qualsiasi utente potrebbe accedere al sql server inserendo le sue user e password a windows. sicuramente mi sfugge qualcosa, devo non aver capito del tutto questa parte della tua risposta. potresti chiarire i miei dubbi?

    grazie infinite per l'enorme aiuto che mi stai dando. ripeto, nemmeno i libri sostiuiscono l'importanza di consigli simili dati da persone così esperte.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Shadow976
    1. seguirò il tuo consiglio sull'associare i dati di accesso al sistema operativo anche al mio programma. la mia considerazione si riferiva all'accesso non al database da parte del mio programma, ma all'accesso al mio programma dall'utente, per il quale alcuni programmi associano le stesse credenziali del s.o., mi confermi invece che tutte le tue considerazioni e quindi anche i tuoi consigli si riferivano al solo accesso al database dal programma e non all'accesso al programma da parte dell'utente, che avrà cosi user e password libere e indipendenti da quelle del s.o.?
    Forse non sono stato chiarissimo, e quindi ti dico come ho organizzato io tutta la faccena, nel mio ambito di lavoro (anche se, data la relativa "grandezza" di tale ambiente implica, mi rendo conto, alcune differenze con il tuo ...).

    1) Esiste un server (in realta', un cluster di server, ma questo non e' significativo ...) su cui gira SQL Server e che e' amministrato unicamente da me (quindi un server con un amministratore) e che fa parte di un dominio AD di cui al punto 2;

    2) esiste una infrastruttura di autenticazione degli utenti tramite Active Directory (un dominio AD che amministro anche io ...) che dispone delle credenziali di autenticazione di tutti gli utenti che, possibilmente ma non obbligatoriamente, possono accedere ai dati del db;

    3) nel server SQL, gli stessi utenti appartenenti al dominio, sono autorizzati (tramite la gestione della security di SQL Server) in vari modi a gestire dati di vari database; diversi utenti per diversi database, e diversi utenti per varie autorizzazioni (lettura, scrittura, a livello di tabelle, di esecuzione di stored procedure e cosi' via ...);

    4) nelle postazioni client gli utenti fanno il login al dominio AD con le proprie credenziali e vengono riconosciuti; tramite la stringa di connessione al db dell'applicazione (trusted), sono riconosciuti dal server SQL e autorizzati a fare solamente le operazioni previste.

    2. ieri sera ho studiato a lungo sul mio nuovo libro in merito al particolare utente sql server di cui parli ed ho visto che ha i massimi poteri sul sql server. benissimo per la stringa trusted, farò come dici tu. ma in modo trusted quali user e password dovrei creare? se associo le credenziali di accesso al s.o. allora qualsiasi utente potrebbe accedere al sql server inserendo le sue user e password a windows. sicuramente mi sfugge qualcosa, devo non aver capito del tutto questa parte della tua risposta. potresti chiarire i miei dubbi?
    Non qualsiasi utente, ma quelli che autorizzi tu (come amministratore) su SQL server.

    grazie infinite per l'enorme aiuto che mi stai dando. ripeto, nemmeno i libri sostiuiscono l'importanza di consigli simili dati da persone così esperte.
    Di nulla ...

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    si, mi rendo conto che il mio contesto è diversissimo dal tuo. forse il mio quesito era incompleto ed è meglio se ti dico in dettaglio il mio ambito di applicazione.

    1. il mio programma finale si presenterà all'utente finale come file di installazione che provvederà ad installare framework, motore versione Express, il mio software ed il database

    2. al limite verrà data all'utente la sola possibilità di scegliere un eventuale percorso di rete nel caso di database installato su un diverso pc

    3. in condizioni normali vorrei che questo potesse essere già sufficiente per il funzionamento del tutto, penso a tanti programmi client che installano tutto il necessario ed all'utente che li usa senza bisogno di toccare il motore db

    4. vorrei che l'unico ruolo di un admin sarebbe quello di poter accedere al mio programma per creare i vari utenti del mio programma, in genere diversi dagli utenti del s.o.

    quale strada mi suggerisci per questo risultato?

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    oregon non rispondermi subito per favore. l'argomento è vasto, tu dovresti dilungarti troppo ed io perderei l'occasione per capire al meglio le tue dritte. tra due ore lascio la facoltà e vado a casa, leggo il capitolo sulla sicureza del mio libro Mondadori e ti scrivo qui come ho pensato di risolvere il problema. in questo modo tu dovrai solo dirmi se la mia soluzione va bene o chiarire eventuali dubbi residui. creo sia la cosa migliore. ps troverai questo mio nuovo post stasera alle sette e mezza. a più tardi e grazie ancora!

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Eccomi puntuale. Vedrò di schematizzare la questione nel modo più chiaro possibile.


    RISULTATO DA CONSEGUIRE

    Il mio scopo finale è creare un file eseguibile di installazione che installi correttamente framework 2.0, motore database Sql Server 2005 Express, il mio programma, ed il relativo database mediante esecuzione del suo script. Naturalmente di tutto ciò in questo post mi interessa unicamente il corretto modo di interfacciare il mio programma con il database. In ogni caso voglio creare una connessione tipo server, e non al 'file' di database; inoltre voglio creare una connessione trust, con user e password. Sia che il database sia installato sullo stesso computer (quindi su un cosiddetto server 'virtuale'), sia che sia installato su un pc diverso sia esso pc o server vero e proprio (ed in tal caso darò la possibilità al primo avvio di 'sfogliare' le risorse di rete per consentire all'installatore di scegliere la postazione con il database, percorso che poi integrerò nella stringa di connessione che salverò poi in un file di impostazioni) in entrambi i casi dicevo non voglio dare possibilità di accedere al mio database da nessuno eccetto l'amministratore, che è bene possa accedervi.


    SCENARIO

    So che esistono tre tipi di credenziali che possono interessarmi: 1. Quelle di accesso a Windows, e tra queste quelle dell'amministratore 2. Quelle di accesso a Sql Server 2005 Exp (tra cui l'utente SA che ha i massimi poteri e per questo è buono assegnargli una password quanto prima) 3. Quelle del mio programma, ossia quella lista di userid e password che l'amministratore del mio programma (ovvero il primo utente che lo aprirà dopo l'installazione, perché pensavo al primo avvio di aprire una finestra dove viene chiesto di creare utenti) potrà creare e che saranno memorizzate in apposita tabella del database del mio programma.


    QUESITI

    Qual'è la strada da seguire per giungere al risultato che cerco? Ed in particolare, come è opportuno associare i vari tipi di credenziali? (pensavo, nella mia attuale ignoranza, di associare gli utenti di Win a Sql Server lasciando quelle di accesso al mio programma gestite in modo del tutto autonomo ma sottopongo questo quesito alla preparazione di chi legge).


    Sappiate che non sono meno riconoscente a voi di quanto potrei esserlo verso un mio docente durante un pomeriggio di ricevimento. Di nuovo, grazie.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    ... tanto per cambiare devo aver di nuovo abusato della vostra disponibilità con un quesito troppo generico. chiedo venia, domanderò a qualche mio docente e mi prometto di essere più ristretto e specifico nei prossimi post. a presto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.