मुझे किसी विशेष उपयोगकर्ता तक पहुंच को सीमित करने की आवश्यकता है, लेकिन उन्हें अभी भी डेटा को dbo के स्वामित्व वाली तालिकाओं में देखने में सक्षम होने की आवश्यकता है।
मैं निम्नलिखित करने की कोशिश कर रहा हूं:
- dbo स्कीमा कार्य करता है क्योंकि यह सामान्य रूप से होता है, इसमें हर चीज की पहुंच होती है
- स्कीमा 1 स्कीमा की पहुंच केवल स्कीमा 1 वस्तुओं तक है
- यदि एक स्कीमा 1 दृश्य या संग्रहीत कार्यविधि dbo के स्वामित्व वाली तालिकाओं में डेटा तक पहुँचती है, तो अनुमतियाँ श्रृंखला उचित रूप से
- user1 के पास स्कीमा 1 तक पहुंच है, और कुछ नहीं; सिवाय # 3 के मामले में
यहाँ मैंने कोशिश की है:
- एक यादृच्छिक पासवर्ड के साथ एक परीक्षण लॉगिन करने के लिए मैप किया गया एक उपयोगकर्ता 1 उपयोगकर्ता बनाएं
- उन में कुछ परीक्षण डेटा के साथ dbo स्कीमा में एक युगल टेबल बनाया
- एक स्कीमा 1 स्कीमा बनाया
- एक स्कीमा 1.get_profiles बनाया जो स्कीमा 1 नामक एक दृश्य से चुनता है। लाभ जो dbo.people, dbo.taglinks और dbo.tags में डेटा तक पहुँचता है
हालाँकि, उपयोगकर्ता 1 के रूप में लॉग इन करते समय निम्नलिखित स्टेटमेंट का उपयोग करें:
EXEC get_profiles 1
का परिणाम:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
मैंने कोशिश की है WITH EXECUTE AS OWNER
और यह समझने के लिए शुरू नहीं कर सकता कि "स्वामित्व जंजीर" कैसे काम करने वाला है।
मैंने भी कोशिश की है
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO user1
GRANT UPDATE ON SCHEMA::schema1 TO user1
GRANT VIEW DEFINITION ON SCHEMA::schema1 TO user1
लेकिन मुझे निम्न त्रुटि मिलती है (डबो-स्तरीय पहुँच वाला उपयोगकर्ता होने के बावजूद):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
जो मुझे चाहिए वह user1 है जो मैं इसे संग्रहीत प्रक्रियाओं के माध्यम से डेटा तक पहुंचने में सक्षम हो सकता हूं, और कुछ नहीं।
इसके अतिरिक्त, यह अंततः एक मौजूदा SQL एज़्योर डेटाबेस पर रहने का इरादा है, लेकिन मैं पहले एक स्थानीय डमी डेटाबेस के खिलाफ परीक्षण कर रहा हूं।