ट्रंकट टेबल को संग्रहीत प्रक्रियाओं जैसी वस्तुओं पर सेटिंग की अनुमति के साथ पूरा किया जा सकता है:
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 TABLE
। EXECUTE 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
पास तालिका को संशोधित करने, या इस तालिका के किसी भी डेटा को पढ़ने या संशोधित करने के लिए कोई पूर्ण अधिकार नहीं है।
यह केवल इस प्रक्रिया के संदर्भ में इस विशिष्ट कार्य को पूरा करने के लिए आवश्यक अधिकारों को लेता है।
संग्रहीत कार्यविधियाँ बनाने का यह तरीका उन कार्यों को कर सकता है जिन्हें उन अधिकारों को स्थायी रूप से निर्दिष्ट किए बिना स्थायी सुरक्षा अधिकारों की आवश्यकता होती है जो बहुत उपयोगी होते हैं।