2012-06-18 8 views
10

La mia applicazione (C#, ASP.Net) deve inserire, aggiornare ed eliminare dati nel DB ed eseguire stored procedure. Devo impedirgli di modificare lo schema del database: nessuna modifica delle tabelle, creazione o rilascio, nessuna modifica alle stored procedure.Come consentire a un utente di SQL Server di inserire/aggiornare/eliminare dati, ma non di alterare lo schema?

Quale combinazione di autorizzazioni è necessario concedere all'utente dell'applicazione? Solo 'select' non funzionerà, perché ha bisogno di inserire/aggiornare/cancellare i dati nelle tabelle.

Come si controllano le autorizzazioni e l'accesso per un accesso particolare? Come concedere o negare autorizzazioni e accesso per un accesso? Devo dare le autorizzazioni a un nuovo utente (accesso) per accedere a un solo database.

Utilizzo di SQL Server 2008 R2, con SSMS.

risposta

18

Se davvero si vuole controllare questo a livello di oggetto, si può fare:

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user; 

a livello di schema:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user; 

Idealmente, però, si potrebbe non consentire ad hoc DML contro le tue tabelle e controlla tutto il DML attraverso stored procedure. In questo caso è sufficiente concedere exec sulla procedura in sé, e non agli oggetti che tocca:

GRANT EXEC ON dbo.procedure TO user; 

Allo stesso modo se si desidera consentire exec su tutte le procedure in uno schema specifico, si può dire:

GRANT EXEC ON SCHEMA::dbo TO user; 

L'unica eccezione è quando la procedura memorizzata compone SQL dinamico. In questi casi, potrebbe essere necessario applicare le autorizzazioni alle tabelle sottostanti nel contesto dell'esecuzione dinamica di SQL o potrebbe essere possibile utilizzare EXECUTE AS OWNER.

+0

L'autorizzazione di "aggiornamento" e "eliminazione" consentirà all'utente di modificare e eliminare le tabelle? Inoltre, posso concedere autorizzazioni su uno schema, piuttosto che per tabella? – jprusakova

+1

No, l'aggiornamento e l'eliminazione si riferiscono ai dati nella tabella, non ai dati stessi. Puoi sempre provarlo. E sì, ho pubblicato un esempio in cui è possibile modificare lo schema anziché per oggetto (che può essere utile se si aggiungono le tabelle in un secondo momento, le autorizzazioni vengono ereditate, a meno che non si desideri aggiungere una tabella a cui * l'utente * non ha accesso, allora dovrai negare esplicitamente su quel tavolo). –

+0

grazie, questo aiuta! – jprusakova

Problemi correlati