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.
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
Questa è una soluzione deliziosa! Hai ottenuto il mio voto ... –