2009-07-06 22 views
17

Per quanto riguarda un'applicazione che ha sia una web e client desktop Versione:Best Practice: SQL Accesso diretto vs. Web Service

  1. Qual è la migliore pratica per il client desktop che ha bisogno di accedere ad un Server SQL?
  2. Quali sono i vantaggi della connessione al database dall'applicazione rispetto all'utilizzo di un servizio Web?
  3. Quale offre una maggiore sicurezza?
  4. Che tipo di ambito richiederei l'uno contro l'altro (intranet aziendale e app Web, ecc.)
  5. Esistono altre considerazioni necessarie quando si sceglie la piattaforma?

risposta

13

Qual è la migliore pratica per il client desktop che ha bisogno di accedere a un server SQL?

Se si utilizza un server SQL locale, accedere direttamente al database. Se il client deve utilizzare un database SQL su un altro sistema, l'uso di un servizio Web è preferito per una protezione aggiuntiva e il vantaggio aggiunto di avere un livello aziendale che dovrebbe essere in grado di gestire più utenti.

Quali sono i vantaggi della connessione al database dall'applicazione rispetto all'utilizzo di un servizio Web?

La connessione tramite un servizio Web sarà sempre un po 'più lenta e le modifiche al database saranno un po' più difficili da aggiungere all'intero sistema. (Fondamentalmente, ciò significherebbe che è necessario creare una versione più recente del servizio Web mantenendo il vecchio servizio Web per la compatibilità con le versioni precedenti.)

Quale offre una maggiore sicurezza?

L'utilizzo dei servizi web tende ad essere più sicuro, anche se la sicurezza è spesso più un persone problema di problema software. Ma con il servizio web tra l'utente e il database, la connessione al database è più sicura poiché l'utente non può accedervi direttamente. (Ad eccezione delle funzionalità fornite tramite il servizio Web.) Questo punto è valido quando client e database si trovano sullo stesso sistema perché l'utente può ottenere l'accesso completo.

Che tipo di portata richiederebbe uno contro l'altro (impresa intranet vs. web app, ecc)

servizi Web sono migliori per le applicazioni client-server, dove gli utenti non dovrebbero avere accesso diretto al database. In caso contrario, una connessione diretta al database migliorerebbe le prestazioni. Quando si crea un servizio Web, iniziare scrivendo una libreria generica (di classe) che fornirà le funzionalità per il servizio web. Creare un servizio Web intorno a questa libreria (aziendale), esponendo i metodi importanti al mondo esterno. Qualsiasi sito Web può chiamare direttamente questa libreria senza utilizzare il servizio Web, sebbene sia sempre possibile anche consentire al codice Web di accedere ai dati tramite il servizio Web. Anche se si crea solo un'applicazione desktop con un database locale, scrivere una business library con la logica per accedere al database è solo un'ottima cosa da fare. Il tuo cliente potrebbe chiamare questa business library direttamente o attraverso un servizio web, a seconda delle tue esigenze.

Ci sono altre considerazioni che sono necessarie quando si sceglie sulla piattaforma?

Per lo più solo la quantità di hardware che si è disposti a utilizzare per impostare le cose. Se puoi permetterti di configurare un server database, un servizio web separato per i servizi e un terzo per il tuo sito web, con una dozzina circa di sistemi client, allora puoi optare per la versione più stratificata, dove sia il client che il sito web chiamare il servizio web, che chiama il database. Ma se tutto ha bisogno di essere eseguito su un singolo sistema, è sufficiente attenersi all'applicazione e al livello aziendale/libreria.

L'aggiunta di livelli ridurrà le prestazioni dalla vista di un singolo utente, però. Tuttavia, lavorare con più livelli può migliorare le prestazioni complessive perché le risorse vengono divise meglio tra più utenti.

+0

"poiché l'utente non può accedervi direttamente" - per quanto riguarda il caso in cui l'accesso al DB è limitato all'esecuzione di stored procedure? Tutti i SELECT/UPDATE/DELETE diretti sono negati. Esiste un rischio per la sicurezza a livello di porta MS SQL che è più debole dell'accesso alla porta del server Web? – i486

15

La regola generale è la seguente:

  1. Scrivi un assemblaggio di accesso ai dati indipendente che parlerà al database.
  2. Se si cerca l'interoperabilità tra diverse piattaforme/client, esporre questo assieme come servizio Web SOAP.
  3. Se si sta cercando prestazioni, utilizzare l'assembly direttamente nelle applicazioni .NET client.
+1

+1 per risposta breve e concisa. –

+0

qualsiasi motivo specifico per la definizione di applicazioni .NET alla fine? –

3

Se è possibile accedere al DB dal desktop, è necessario farlo.

Sono disponibili più tipi di client. Ciò significa che la tua applicazione dovrebbe avere più livelli. Ciò non significa che hai bisogno di più livelli.

È possibile che più livelli siano necessari se i livelli devono trasferire dati tramite firewall o se si dispone di diverse tecnologie.

7

Vorrei tenerlo semplice e ridurre al minimo la quantità di livelli. I livelli costano prestazioni, introducono complessità e richiedono modifiche da apportare in più posizioni.

Quindi, se la connessione netwerk tra l'applicazione e il server Sql è aperta (in genere la porta tcp 1433), utilizzerei la connettività Sql.

3

Dato il contesto, può esserci un grosso problema di sicurezza con l'accesso dei client ai database. Richiede l'accesso degli utenti al db o la creazione di un account di servizio. Dare agli utenti l'accesso diretto al db comporta dei rischi. Entrambi gli approcci aprono la porta allo sfruttamento di dll desktop per connettersi a db al di fuori del contesto applicativo (più volte ho visto casi in cui esiste una classe di accesso ai dati comune utilizzata da tutte le operazioni funzionali e, naturalmente, questi componenti inizializzano tutte le informazioni di connessione L'accesso basato su Reflection semplifica l'accesso a metodi protetti o privati, a meno che non si assuma i privilegi di sicurezza).

I servizi Web espongono operazioni funzionali che non espongono alcuna operazione basata su sql. Non solo è più sicuro, astrae il tuo cliente dall'implementazione dello storage di dati.

Di nuovo, dipende dal contesto. Tuttavia, nel regno Enterprise/ISV, è generalmente un grande no-no.