आप किसी एकल संग्रहीत कार्यविधि के लिए निष्पादन की अनुमति कैसे देते हैं?


40

आम तौर पर जब मैं एक संग्रहीत प्रक्रिया बनाता हूं तो मैं निम्नलिखित का उपयोग टेम्पलेट के रूप में करता हूं

Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..> 
as begin

 <procedure>

end

क्या मेरे पास उस समय केवल उस संग्रहीत कार्यविधि पर निष्पादन की अनुमति देने को शामिल करने का एक तरीका है?
उदाहरण के लिए जैसे ...

Grant execute [User_Execute] 

... लेकिन केवल इस संग्रहीत प्रक्रिया के लिए?

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

शीर्ष उत्तर को संपादित करें निश्चित रूप से मुझे सही दिशा में इंगित किया गया है, यह अनिवार्य रूप से वही है जो मैं देख रहा था, मैंने कमांड को बैचने के बारे में नहीं सोचा था जो कि मैं कर रहा हूं, मेरी संग्रहीत प्रक्रिया के साथ कमांड को बैच कर। वैसे भी, मुझे लगता है कि यह बहुत चालाक है।

Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..> 
as begin

<procedure>

end
GO
GRANT EXECUTE ON <procedurename> to <username>
GO

संपादित पाठ में प्रदान किया गया कोड मान्य है और इस प्रश्न का सही उत्तर है।
निन्यान्नॉटआउट

जवाबों:



10

ट्रंकट टेबल को संग्रहीत प्रक्रियाओं जैसी वस्तुओं पर सेटिंग की अनुमति के साथ पूरा किया जा सकता है:

GRANT EXECUTE ON <schema>.<object> to <user>;

हालाँकि, आप लॉगिन और उपयोगकर्ता दोनों स्तरों पर सुरक्षा अधिकार देना चाहते हैं। आप उन वस्तुओं के लिए केवल आवश्यक अधिकारों को निर्धारित करना और देना चाहते हैं, जिनके लिए एक्सेस की आवश्यकता होती है (जैसे निष्पादन)। उस EXECUTE ASक्षमता के उपयोग पर विचार करें जो किसी अन्य उपयोगकर्ता के प्रतिरूपण को उन अनुमतियों को मान्य करने में सक्षम बनाती है, जिन्हें कोड निष्पादित करने की आवश्यकता होती है, जो सभी अंतर्निहित वस्तुओं (जैसे तालिकाओं) को सभी आवश्यक अधिकार प्रदान करने के बिना होती हैं। EXECUTE ASसंग्रहीत प्रक्रियाओं, कार्यों, ट्रिगर, आदि में जोड़ा जा सकता है।

सही प्रक्रिया के भीतर कोड को इस प्रक्रिया में जोड़ें:

CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER

इस मामले में आप मॉड्यूल के मालिक को बुलाया जा रहा है। आप SELF, या मॉड्यूल बनाने वाले या परिवर्तन करने वाले उपयोगकर्ता को भी प्रतिरूपित कर सकते हैं ... या CONER को अक्षम करें, जो वर्तमान उपयोगकर्ता को अनुमतियों को लेने के लिए मॉड्यूल को सक्षम करेगा, या ... OWNER को प्रतिरूपित करेगा, जो की अनुमति पर ले जाएगा या ... ... कहा जाने वाला प्रक्रिया का स्वामी 'user_name', जो एक विशिष्ट उपयोगकर्ता को प्रतिरूपित करेगा ... या 'login_name' का प्रतिरूपण एक विशिष्ट लॉगिन प्रतिरूपण करेगा।

समय के अधिकांश, आपको केवल EXECUTEसंग्रहीत प्रॉप्स को अधिकार देने की आवश्यकता होगी और फिर संग्रहीत खरीद के भीतर संदर्भित सभी वस्तुओं को अधिकार प्रदान किए जाएंगे ।

इस तरह, आपको डेटा को अपडेट करने या अतिरिक्त प्रॉपर कॉल करने के लिए निहित अधिकार (उदाहरण: देने की आवश्यकता) नहीं है। स्वामित्व जंजीर आपके लिए इसे संभालती है। यह विशेष रूप से गतिशील sql के लिए सहायक है या यदि आपको इस तरह के उन्नत सुरक्षा कार्य बनाने की आवश्यकता है CREATE TABLEEXECUTE ASइन पर विचार करने के लिए एक उपयोगी उपकरण है।

यह उदाहरण इस सब को स्पष्ट करने में मदद कर सकता है:

डेटाबेस के लिए सार्वजनिक पहुँच के साथ NoPrivUser नामक एक उपयोगकर्ता बनाएं (जैसे dbadb):

USE [master];
GO 
CREATE LOGIN [NoPrivUser] WITH PASSWORD=N'ABC5%', DEFAULT_DATABASE=[dbadb], 
  CHECK_EXPIRATION=ON, CHECK_POLICY=ON;
GO 
USE [DBAdb];
GO 
CREATE USER [NoPrivUser] FOR LOGIN [NoPrivUser];
GO

नोट: इस प्रक्रिया के निर्माता या मालिक लक्ष्य डेटाबेस के भीतर आवश्यक अधिकार सृजन करेंगे।

use DBAdb 
go 
CREATE PROCEDURE dbo.MyProcedure 
WITH EXECUTE AS OWNER 

truncate table MyTable

GO
GRANT EXEC ON dbo.MyProcedure TO NoPrivUser; 
GO
-- Now log into your database server as NoPrivUser and run the following.

साथ EXECUTE ASखंड संग्रहीत प्रक्रिया वस्तु मालिक के संदर्भ के तहत चलाया जाता है। यह कोड सफलतापूर्वक बनाता है dbo.MyTableऔर पंक्तियों को सफलतापूर्वक डाला जाता है। इस उदाहरण में, उपयोगकर्ता के NoPrivUserपास तालिका को संशोधित करने, या इस तालिका के किसी भी डेटा को पढ़ने या संशोधित करने के लिए कोई पूर्ण अधिकार नहीं है।

यह केवल इस प्रक्रिया के संदर्भ में इस विशिष्ट कार्य को पूरा करने के लिए आवश्यक अधिकारों को लेता है।

संग्रहीत कार्यविधियाँ बनाने का यह तरीका उन कार्यों को कर सकता है जिन्हें उन अधिकारों को स्थायी रूप से निर्दिष्ट किए बिना स्थायी सुरक्षा अधिकारों की आवश्यकता होती है जो बहुत उपयोगी होते हैं।


4
यह वह जगह है एक ही जवाब आप कल इतने पर तैनात है, जो मैं भी पठनीयता के लिए प्रारूप करने के लिए किया था।
हारून बर्ट्रेंड

5

यहाँ छवि विवरण दर्ज करें

डेटाबेस लॉगिन का चयन करें -> सुरक्षित पर जाएं और पूर्ववर्ती छवि के अनुसार खोज बटन पर क्लिक करें। खोज बटन पर क्लिक करने पर, आप पाएंगे कि वह ऑब्जेक्ट के प्रकार को जोड़ने के लिए विंडो का अनुसरण कर रहा है।

ऑब्जेक्ट टाइप बटन पर क्लिक करें और आपको विभिन्न ऑब्जेक्ट्स के साथ "ऑब्जेक्ट प्रकार चुनें" विंडो मिलेगी। अब यदि आप देखते हैं, तो संग्रहीत कार्यविधि ऑब्जेक्ट प्रकार क्षेत्र में सूचीबद्ध है। अब हम अपनी विशिष्ट संग्रहीत प्रक्रिया का चयन करेंगे, जिस पर हम अनुमति प्रदान करना चाहते हैं।


सबसे पहले, यह सवाल पांच साल पुराना था जब आपने इसका उत्तर दिया था। यह ठीक होगा, ओपी को छोड़कर विशेष रूप से उन समाधानों के लिए कहा गया है जो जीयूआई का उपयोग नहीं करते हैं और एक स्क्रिप्ट में एम्बेड किए जा सकते हैं। आपकी प्रतिक्रिया से पता नहीं चलता है।
एरिक ब्रैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.