Proteggere database e stored procedure

lunedì 22 novembre 2010 - 10.08

trinity Profilo | Guru

Buongiorno,
ragazzzi un database scritto in sql server 2008 e che contiene numerose stored per la sua gestione come potrei proteggerlo per evitare che il database venga copiato da altri o meglio vengano copiate le stored procedure?
In pratica un buon programmatore potrebbe benissimo riuscire a fare l'attach dei file ed aprire il db per esempio con sql server management e vedere la progettazione del db stesso con le sue stored. Io devo evitare che avvenga questo.
Come posso fare?

Ciao grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Buongiorno,
ciao

>ragazzzi un database scritto in sql server 2008 e che contiene
>numerose stored per la sua gestione come potrei proteggerlo per
>evitare che il database venga copiato da altri o meglio vengano
>copiate le stored procedure?
chi ha accesso a quel server, se non è opportunamente profilato, può ovviamente prendere ciò che vuole.
Ma anche profilato in un certo modo, soprattutto gli sviluppatori, non possono non vedere le stored procedure (immagino).
Diciamo che non puoi difenderti da chi ci lavora
All'esterno il discorso cambia. Puoi fare in modo che un db (backuppato o copiato) dai tuoi server, fuori da essi non possa essere nemmeno restorato..
leggi qui:
http://technet.microsoft.com/en-us/library/cc278098(SQL.100).aspx

>Ciao grazie
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

trinity Profilo | Guru

>>Buongiorno,
>ciao
>
>>ragazzzi un database scritto in sql server 2008 e che contiene
>>numerose stored per la sua gestione come potrei proteggerlo per
>>evitare che il database venga copiato da altri o meglio vengano
>>copiate le stored procedure?
>chi ha accesso a quel server, se non è opportunamente profilato,
>può ovviamente prendere ciò che vuole.
>Ma anche profilato in un certo modo, soprattutto gli sviluppatori,
>non possono non vedere le stored procedure (immagino).
>Diciamo che non puoi difenderti da chi ci lavora
>All'esterno il discorso cambia. Puoi fare in modo che un db (backuppato
>o copiato) dai tuoi server, fuori da essi non possa essere nemmeno
>restorato..
>leggi qui:
>http://technet.microsoft.com/en-us/library/cc278098(SQL.100).aspx

non c'è un link in italiano? :D

comunque il mio problema è questo che hai clienti devo installare il database altrimenti non possono lavorare, ma vorrei se qualcuno installa un tool tipo sql server management non posso accedere al db appatto che non sappia la apssword di accesso.
Io utilizzo sql server express 2008 e potrei attivare (ovviamente se si può) l'autenticazione mista, all'account sa stabilisco una pwd ma come posso evitare di bloccare l'accesso con l'autenticazione windows?
Poi semmai alle stored gli vado ad applicare il criptaggio.

che ne pensi?
>
>>Ciao grazie
>di nulla!
>--
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>non c'è un link in italiano? :D
parti da qui, non ho trovato molto
http://msdn.microsoft.com/it-it/library/bb510476.aspx

>comunque il mio problema è questo che hai clienti devo installare
>il database altrimenti non possono lavorare, ma vorrei se qualcuno
>installa un tool tipo sql server management non posso accedere
>al db appatto che non sappia la apssword di accesso.
scusa eh.. ma se installi il database dal cliente, l'applicazione che distribuisci dovrà essere l'unica ad avere le credenziali di accesso, per di più limitate da una normale profilazione (ad esempio role based, in cui ogni ruolo disegnato, ha i permessi di esecuzione/lettura/ecc..). Se il cliente installa management studio e ha il controllo totale della rete su cui installi il database, senza privilegi di amministratore non può aggiungere le sue utenze e fare ciò che vuole.

>Io utilizzo sql server express 2008 e potrei attivare (ovviamente
>se si può) l'autenticazione mista, all'account sa stabilisco
>una pwd ma come posso evitare di bloccare l'accesso con l'autenticazione windows?
a mio avviso, se installi il database e dai solo un accesso sql all'applicazione, proteggendo opportunamente la credenziale nell'applicazione, non va male.


--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

trinity Profilo | Guru

>>non c'è un link in italiano? :D
>parti da qui, non ho trovato molto
>http://msdn.microsoft.com/it-it/library/bb510476.aspx
>
>>comunque il mio problema è questo che hai clienti devo installare
>>il database altrimenti non possono lavorare, ma vorrei se qualcuno
>>installa un tool tipo sql server management non posso accedere
>>al db appatto che non sappia la apssword di accesso.
>scusa eh.. ma se installi il database dal cliente, l'applicazione
>che distribuisci dovrà essere l'unica ad avere le credenziali
>di accesso, per di più limitate da una normale profilazione (ad
>esempio role based, in cui ogni ruolo disegnato, ha i permessi
>di esecuzione/lettura/ecc..). Se il cliente installa management
>studio e ha il controllo totale della rete su cui installi il
>database, senza privilegi di amministratore non può aggiungere
>le sue utenze e fare ciò che vuole.

Aspetta ricapitoliamo..io sul server del cliente devo installare sql server 2008 ed ovviamente inserire il db da me creato cone le sue tabelle e stored ecc...
Il discorso che essendo un'ente pubblico c'è il responsabile dell'area che ha pieno potere nell'entrare nel server ma non in sql server...però da esperienze professionali...non si può mai sapere che l'ente a mia insaputa potrebbe contattare un altro programmatore e dato che gli adetti possono accedere sul server uno esperto potrebbe entrare in sql server e smanettare sul mio db e sulle stored in modo tale che possano sostituire la mia figura?
Quindi io devo trovare il modo che solo io posso accedere al database da me creato e alle sue stored...Anche se uno apre SSMS può connettere al servizio sql ma non aprire il mio db

Si può fare?

>>Io utilizzo sql server express 2008 e potrei attivare (ovviamente
>>se si può) l'autenticazione mista, all'account sa stabilisco
>>una pwd ma come posso evitare di bloccare l'accesso con l'autenticazione windows?
>a mio avviso, se installi il database e dai solo un accesso sql
>all'applicazione, proteggendo opportunamente la credenziale nell'applicazione,
>non va male.
>
>
>--
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Aspetta ricapitoliamo..io sul server del cliente devo installare
>sql server 2008 ed ovviamente inserire il db da me creato cone
>le sue tabelle e stored ecc...
>Il discorso che essendo un'ente pubblico c'è il responsabile
>dell'area che ha pieno potere nell'entrare nel server ma non
>in sql server...però da esperienze professionali...non si può
>mai sapere che l'ente a mia insaputa potrebbe contattare un altro
>programmatore e dato che gli adetti possono accedere sul server
>uno esperto potrebbe entrare in sql server e smanettare sul mio
>db e sulle stored in modo tale che possano sostituire la mia
>figura?
>Quindi io devo trovare il modo che solo io posso accedere al
>database da me creato e alle sue stored...Anche se uno apre SSMS
>può connettere al servizio sql ma non aprire il mio db
Se tu installi sql server 2008, in modalità mista, e fai un utente sql le cui credenziali sono solo sull'applicazione (magari nascoste e non nel config), nessuno riesce ad entrare a meno che non sappia quelle credenziali.
Quindi l'unica porta aperta potrebbe essere l'autenticazione windows, ma se nessuno ha l'utenza sysadmin per poter creare delle login, direi che sei abbastanza sicuro. Al massimo comunque, se qualcuno scopre le credenziali necessarie all'applicazione, il massimo che può fare, se hai profilato bene, è eseguire delle stored procedure o vedere delle viste..
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

trinity Profilo | Guru

>>Aspetta ricapitoliamo..io sul server del cliente devo installare
>>sql server 2008 ed ovviamente inserire il db da me creato cone
>>le sue tabelle e stored ecc...
>>Il discorso che essendo un'ente pubblico c'è il responsabile
>>dell'area che ha pieno potere nell'entrare nel server ma non
>>in sql server...però da esperienze professionali...non si può
>>mai sapere che l'ente a mia insaputa potrebbe contattare un altro
>>programmatore e dato che gli adetti possono accedere sul server
>>uno esperto potrebbe entrare in sql server e smanettare sul mio
>>db e sulle stored in modo tale che possano sostituire la mia
>>figura?
>>Quindi io devo trovare il modo che solo io posso accedere al
>>database da me creato e alle sue stored...Anche se uno apre SSMS
>>può connettere al servizio sql ma non aprire il mio db
>Se tu installi sql server 2008, in modalità mista, e fai un utente
>sql le cui credenziali sono solo sull'applicazione (magari nascoste
>e non nel config), nessuno riesce ad entrare a meno che non sappia
>quelle credenziali.
>Quindi l'unica porta aperta potrebbe essere l'autenticazione
>windows, ma se nessuno ha l'utenza sysadmin per poter creare
>delle login, direi che sei abbastanza sicuro.

Come faccio a vedere se è impostata l'utenza sysadmin e semmai a disabiltarla? Ho la versione ita dei SSMS..
Ma io voglio che non possono copiare e pertanto anche modifica il codice delle stored dato che la funzionalità del mio db si basa quasi interamente su di loro...
Quindi criptare anche le stored sarebbe buono?
Senti inoltre visto che ci sono dato che il mio serve deve ricevere query remote...il valore del timeout è impostato su default a 600 sec. mi consigli di lasciare questo oppure di variarlo per ovviamente ottenere maggiori prestazioni.


Ciao


Al massimo comunque,
>se qualcuno scopre le credenziali necessarie all'applicazione,
>il massimo che può fare, se hai profilato bene, è eseguire delle
>stored procedure o vedere delle viste..
>--
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Come faccio a vedere se è impostata l'utenza sysadmin e semmai
>a disabiltarla? Ho la versione ita dei SSMS..
devi proprio creare dal cliente, all'atto della configurazione, sul server sql, l'utenza dell'applicazione, e solo quella, magari con sa di cui conoscerai solo tu la pwd.
Tutte le altre utenze puoi disabilitarle alla voce login, o via script, e per farlo con il codice, basta replicare l'operazione sul tuo ssms e poi premere il tastino in altro "genera script"

>Ma io voglio che non possono copiare e pertanto anche modifica
>il codice delle stored dato che la funzionalità del mio db si
>basa quasi interamente su di loro...
ripeto, se l'utenza dell'applicazione non può vedere il codice ma solo eseguirlo, solo l'sa potrebbe vedere tutto, ma la pwd la terrai solo per te.

>Quindi criptare anche le stored sarebbe buono?
la criptazione di cui ti parlavo prima è valida quando cambi server, non puoi criptare "ad un utente".. Se l'utente ha la grant per vedere il codice, può vederlo.
Per criptarle dovresti convertirle tutte in CLR e inventarti un offuscamento delle dll.. un lavoraccio tuttosommato poco utile a mio avviso.

>Senti inoltre visto che ci sono dato che il mio serve deve ricevere
>query remote...il valore del timeout è impostato su default a
>600 sec. mi consigli di lasciare questo oppure di variarlo per
>ovviamente ottenere maggiori prestazioni.
timeout, si spera non ci vada praticamente mai
Non migliori le prestazioni, per quello devi lavorare di indici e modellazione, ed in più sull'infrastruttura applicativa puoi pensare di scalare (parallelizzando) oppure ancora creando un layer di cache..
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5