SQL सर्वर कार्य चलाने के लिए अनुमतियाँ प्रदान करें


22

मेरे पास अपने MSSQL सर्वर 2005 पर एक नौकरी है, जिसे मैं किसी भी डेटाबेस उपयोगकर्ता को चलाने की अनुमति देना चाहता हूं।

मुझे सुरक्षा की चिंता नहीं है, क्योंकि नौकरी का वास्तविक काम करने का इनपुट डेटाबेस टेबल से आता है। बस काम चला रहा है, उस टेबल पर रिकॉर्ड जोड़े बिना कुछ नहीं होगा।

मैं सिर्फ यह नहीं पा सकता कि नौकरी के लिए सार्वजनिक अनुमति कैसे दें।

क्या इसे करने का कोई तरीका है? इस बिंदु पर मैं केवल यही सोच सकता हूं कि काम लगातार चल रहा है (या एक शेड्यूल पर), लेकिन चूंकि इसे केवल किसी भी वास्तविक कार्य को शायद ही कभी करने की आवश्यकता है (शायद हर कुछ महीने में एक बार) और मैं काम करना चाहता हूं जैसे ही यह अस्तित्व में होता है, यह एक इष्टतम समाधान नहीं लगता है।

जवाबों:


20

आप एक स्टोर की गई प्रक्रिया बना सकते हैं जो काम चलाती है। आप with execute as ownerडेटाबेस स्वामी के रूप में संग्रहीत कार्यविधि को चलाने के लिए उपयोग कर सकते हैं । इस तरह, उपयोगकर्ताओं को स्वयं पर अनुमति की आवश्यकता नहीं होती है sp_start_job

create procedure dbo.DoYourJob
with execute as owner
as
exec sp_start_job @job_name = 'YourJob'

DoYourJobलोगों को काम शुरू करने की अनुमति देने के लिए अधिकारों को निष्पादित करें ।

बेशक, आप नौकरी की सामग्री को एक प्रक्रिया में भी रख सकते हैं, और इसे चलाने के लिए अधिकार प्रदान कर सकते हैं। यह एक परिणाम पाठ प्रदर्शित करने की तरह अधिक बातचीत की अनुमति देगा।


यह काम नहीं करता है। गैर-विशेषाधिकार प्राप्त उपयोगकर्ता प्रक्रिया को चला सकता है, लेकिन प्रक्रिया sp_start_job को निष्पादित नहीं कर सकती, क्योंकि उपयोगकर्ता के पास इसे निष्पादित करने की अनुमति नहीं है। मैं नहीं चाहता कि सामग्री एक प्रक्रिया में हो, क्योंकि मैं नहीं चाहता कि कॉलर को नौकरी समाप्त होने की प्रतीक्षा करने की आवश्यकता है।

@ आशारामो: आपके पास संग्रहीत कार्यविधि डेटाबेस स्वामी के रूप में निष्पादित हो सकती है, मैं अपना उत्तर संपादित करूंगा
एंडोमर

अभी भी काम नहीं कर रहा है। मुझे समान त्रुटि मिली। मैंने msdb डेटाबेस में DoYourJob बनाने की कोशिश की, साथ ही अपने डेटाबेस में भी, उसी परिणाम के साथ।

1
@ शर्मो: अजीब, मुझे आश्चर्य है कि डेटाबेस का मालिक कौन है? आप भी उपयोग कर सकते हैं with execute as 'loginname', क्या वह काम करता है?
एंडोमर

3

मूल रूप से, अनुमतियों की आवश्यकता होती है sp_start_job(अनुमति अनुभाग देखें)।

भूमिकाओं को " SQL सर्वर एजेंट फिक्स्ड डेटाबेस रोल्स " में वर्णित किया गया है (ऊपर से लिंक किया गया है)

संपादित करें, जनवरी 2012

अनाम उत्तर देने के बाद 2 साल बाद मैंने उत्तर दिया ...

प्रश्न पढ़ें। इसे कहते हैं

मैं किसी भी डेटाबेस उपयोगकर्ता को चलाने की अनुमति देना चाहता हूं

फिर

मुझे सुरक्षा की चिंता नहीं है

और भी

मैं सिर्फ यह नहीं पा सकता कि नौकरी के लिए सार्वजनिक अनुमति कैसे दें

तो नीचे ओपी की टिप्पणी सवाल का खंडन करती है


1
क्या यह सभी उपयोगकर्ताओं को सभी कार्य चलाने की अनुमति नहीं देगा? मैं चाहता हूं कि उन्हें केवल एक विशिष्ट नौकरी चलाने की अनुमति हो।

1
है जो तुम क्या पूछा ... "काम करने के लिए सार्वजनिक अनुमतियां मिल"
GBN

1

यह एक विशिष्ट उपयोगकर्ता (user1) को Sql Agent की नौकरी चलाने की अनुमति देगा।

SQLAgentUserRole और SQLAgentReaderRole के सदस्य केवल वे ही कार्य शुरू कर सकते हैं जो उनके पास हैं। SQLAgentOperatorRole के सदस्य उन सभी स्थानीय नौकरियों को शुरू कर सकते हैं जिनमें अन्य उपयोगकर्ता शामिल हैं

USE [msdb] GO CREATE USER [user1] FOR LOGIN [user1] GO USE [msdb] GO ALTER ROLE [SQLAgentOperatorRole] ADD MEMBER [user1] GO


0

मुझे SQL Server एजेंट कार्यों को मैन्युअल रूप से निष्पादित करने के लिए अपने ऑपरेटर के लिए अनुमति देने की समान आवश्यकता है। भूमिका SQLAgentOperatorRole देने के लिए मैंने इस पोस्ट SQL सर्वर एजेंट फिक्स्ड डेटाबेस रोल्स का पालन ​​किया ।

आशा है कि यह आपके मामले को हल करने में मदद करेगा।


क्या आपने जो किया उसका ब्योरा इसमें डाल सकते हैं? लिंक केवल उत्तर "पर frowned हैं" - लिंक रोट और सी।
वेरेस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.