2010-02-19 5 views

risposta

21

Dai un'occhiata a questo article. Potrebbe fornirti un'idea interessante per farlo rapidamente.

codice utilizzato in questo articolo:

/* Create a new role for executing stored procedures */ 
CREATE ROLE db_executor 

/* Grant stored procedure execute rights to the role */ 
GRANT EXECUTE TO db_executor 

/* Add a user to the db_executor role */ 
EXEC sp_addrolemember 'db_executor', 'AccountName' 
+0

Ma quello che @Peter ha detto è essenzialmente corretto ... dovrai concedere un nome utente che esegue i privilegi ... questo sito ti darà un modo rapido per farlo. – Aaron

+0

Questa è una soluzione deliziosa! Hai ottenuto il mio voto ... –

2

No, non credo che ci sia un ruolo del database o un server - si deve concedere il permesso di esecuzione per granulare l'utente per le procedure memorizzate pertinenti.

+1

oppure puoi mettere gli utenti in ruoli e concedere i diritti a ciascun processo al ruolo anziché a 1000 diversi utenti. – HLGEM

0

Per espandere sulla risposta, il senso generale è quello di creare un ruolo del database e assegnare le autorizzazioni a tale ruolo. Per fare questo, è necessario un po 'di SQL dinamico di fantasia quali:

Set @Routines = Cursor Fast_Forward For 
    Select ROUTINE_SCHEMA + '.' + ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE 
    From INFORMATION_SCHEMA.ROUTINES 
    Where ROUTINE_NAME NOT LIKE 'dt_%' 
     Or ROUTINE_TYPE = 'FUNCTION' 

Open @Routines 
Fetch Next From @Routines Into @Procname, @RoutineType, @DataType 

While @@Fetch_Status = 0 
Begin 
    Set @Msg = 'Procname: ' + @Procname + ', Type: ' + @RoutineType + ', DataType: ' + Coalesce(@DataType,'') 
    Raiserror(@Msg, 10, 1) WITH NOWAIT 

    If @RoutineType = 'FUNCTION' And @DataType = 'TABLE' 
     Set @SQL = 'GRANT SELECT ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader' 
    Else 
     Set @SQL = 'GRANT EXECUTE ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader' 

    exec(@SQL) 

    Fetch Next From @Routines Into @Procname, @RoutineType, @DataType 
End 

Close @Routines 
Deallocate @Routines

Questo codice concederà EXECUTE per stored procedure e funzioni scalari e selezionare per funzioni definite dall'utente che restituiscono un tipo di tabella.

2
CREATE ROLE db_executor 

GRANT EXECUTE TO db_executor 

Ora, se si riavvia SQL Server Management Studio, quando si fa clic sulla pagina "Mapping utenti" nel Sicurezza-> i login sezione, si vedrà "db_executor" apparirà nella lista ruoli. Basta aggiungere l'utente o puoi farlo manualmente:

EXEC sp_addrolemember 'db_executor', 'AccountName' 
+1

Non è necessario riavviare SSMS per vedere il nuovo ruolo. Basta fare clic destro sulla cartella Security-> Ruoli server e scegliere "Aggiorna" – shahzbot