2010-02-19 13 views
15

SQL सर्वर 2005 में, वहाँ भूमिकाओं में निर्माण कर रहे हैं:संग्रहित प्रक्रियाओं के निष्पादन की अनुमति देने के लिए SQL Server 2005 में अंतर्निहित डेटाबेस भूमिका?

db_datareader

db_datawriter

आदि

कोई भूमिका एक उपयोगकर्ता एक संग्रहीत proc निष्पादित देता है कि है?

मैं db_owner का उपयोग नहीं करना चाहता, क्योंकि इससे हटाने और अपडेट की अनुमति होगी, जिसकी मुझे आवश्यकता नहीं है। केवल अनुमतियों मैं की जरूरत है:

चयन

उत्तर

21

इस article पर एक नज़र डालें। यह आपको जल्दी से ऐसा करने का एक दिलचस्प विचार प्रदान कर सकता है।

कोड है कि लेख में इस्तेमाल:

/* 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

लेकिन @ पीटर ने जो कहा वह अनिवार्य रूप से सही है ... आपको उपयोगकर्ता नाम विशेषाधिकार निष्पादित करने की आवश्यकता होगी ... यह साइट आपको ऐसा करने का एक त्वरित तरीका प्रदान करेगी। – Aaron

+0

यह एक प्यारा समाधान है! आपको मेरा वोट मिला ... –

2

निष्पादित नहीं है, मैं नहीं मानता कि एक डेटाबेस या सर्वर भूमिका है कि वहाँ - आप के लिए बारीकी से अमल की अनुमति प्रदान करने के लिए है प्रासंगिक संग्रहीत प्रक्रियाओं के लिए उपयोगकर्ता।

+1

या आप उन भूमिकाओं में भूमिका नहीं बल्कि 1000 से differnt उपयोगकर्ताओं के लिए प्रत्येक proc के अधिकार रख दिया और अनुदान सकता है। – HLGEM

0

जवाब पर विस्तार करने के लिए, सामान्य सार एक डेटाबेस भूमिका बना सकते हैं और उस भूमिका के लिए अनुमतियां प्रदान कर रहा है।

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

इस कोड को संग्रहित प्रक्रियाओं और अदिश कार्यों को निष्पादित अनुदान और उपयोगकर्ता परिभाषित कार्यों है कि एक टेबल प्रकार वापस जाने के लिए चुन लिए जाएँगे: ऐसा करने के लिए, आप कुछ फैंसी गतिशील एसक्यूएल जैसे की जरूरत है।

2
CREATE ROLE db_executor 

GRANT EXECUTE TO db_executor 

अब, अगर आप SQL सर्वर प्रबंधन स्टूडियो को पुनः आरंभ, जब आप सुरक्षा- में "उपयोगकर्ता का मिलान" पृष्ठ पर क्लिक> अनुभाग लॉगिन, आप "db_executor" दिखाई देगा भूमिकाओं सूची में प्रकट। बस उपयोगकर्ता जोड़ सकते हैं या आप मैन्युअल रूप से ऐसा कर सकते हैं:

EXEC sp_addrolemember 'db_executor', 'AccountName' 
+1

आपको नई भूमिका देखने के लिए एसएसएमएस को पुनरारंभ करने की आवश्यकता नहीं है। बस सुरक्षा-> सर्वर भूमिका कंटेनर फ़ोल्डर पर राइट क्लिक करें और "ताज़ा करें" चुनें – shahzbot

संबंधित मुद्दे