जवाब पर विस्तार करने के लिए, सामान्य सार एक डेटाबेस भूमिका बना सकते हैं और उस भूमिका के लिए अनुमतियां प्रदान कर रहा है।
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
इस कोड को संग्रहित प्रक्रियाओं और अदिश कार्यों को निष्पादित अनुदान और उपयोगकर्ता परिभाषित कार्यों है कि एक टेबल प्रकार वापस जाने के लिए चुन लिए जाएँगे: ऐसा करने के लिए, आप कुछ फैंसी गतिशील एसक्यूएल जैसे की जरूरत है।
लेकिन @ पीटर ने जो कहा वह अनिवार्य रूप से सही है ... आपको उपयोगकर्ता नाम विशेषाधिकार निष्पादित करने की आवश्यकता होगी ... यह साइट आपको ऐसा करने का एक त्वरित तरीका प्रदान करेगी। – Aaron
यह एक प्यारा समाधान है! आपको मेरा वोट मिला ... –