उपयोगकर्ता को अपने स्वयं के स्कीमा के भीतर कुछ भी करने की अनुमति दें लेकिन स्कीमा को स्वयं बनाएं या छोड़ें नहीं


12

मैंने SQL Azure में एक स्कीमा बनाया है और एक डेटाबेस भूमिका के लिए निम्नलिखित अनुमति दी है:

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW 
DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;

उपरोक्त परिभाषित अनुमतियों के माध्यम से myuserअपना स्वयं का स्कीमा बना सकते हैं / छोड़ सकते हैं, इसलिए समस्या को दूर करने के लिए मैंने किसी भी स्कीम की अनुमति की कोशिश की। लेकिन यह अनुमति भी उपयोगकर्ता को टेबल बनाने / छोड़ने से इनकार करती है।

उपयोगकर्ता को अपने स्कीमा के भीतर कुछ भी करने की अनुमति देने के लिए किन अनुमतियों की आवश्यकता होती है लेकिन स्कीमा को स्वयं बनाने या छोड़ने में सक्षम नहीं होते हैं?

जवाबों:


8

CONTROLस्कीमा पर अनुदान देने की आवश्यकता नहीं है ।
अनुमति के लिए आवश्यक DROP SCHEMAया तो है CONTROLस्कीमा पर या ALTER ANY SCHEMAडेटाबेस स्तर पर, और यही वजह है अपने उपयोगकर्ता स्कीमा ड्रॉप करने में सक्षम था। इन दोनों अनुमतियों को हटाने से रोल-जुड़े उपयोगकर्ताओं को स्कीमा बनाने और छोड़ने से रोका जा सकेगा (जब तक कि उनके पास निश्चित रूप से उच्च स्तर की अनुमति न हो)।

CREATE ALTERऔर DROPअन्य ऑब्जेक्ट्स के लिए आवश्यक अनुमति स्कीमा पर अनुमति CREATEके साथ संयुक्त ऑब्जेक्ट प्रकार (टेबल \ प्रक्रिया \ फ़ंक्शन \) के लिए ALTERअनुमति है।
आपकी स्क्रिप्ट में ये अनुमतियाँ पहले से ही हैं, इसलिए आपको जो भी करना है वह CONTROLअनुमति को हटा देना है। संदर्भ के लिए, यहां बयानों की एक बीओएल सूची है DDLजहां आप सभी ऑब्जेक्ट प्रकारों के लिए आवश्यक अनुमति पा सकते हैं।

आलसी के लिए, अनावश्यक अनुमति को हटाने के बाद यहाँ आपका कोड है:

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT,
          UPDATE, VIEW DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;

लेकिन उपयोगकर्ता अन्य स्कीमा के तहत भी ऑब्जेक्ट बनाने में सक्षम होगा?
u23432534

4

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

उदाहरण:

select * from dbo.test; --fails

create view myschema.test
as 
select * 
from dbo.test; --view is created

select * from myschema.test;  --contents of dbo.test now revealed.

यह SQL सर्वर इंजन का सही संचालन है; अनुमतियाँ समान प्राधिकरण के साथ अन्य स्कीमा में अनुमति देती हैं। ऐसी पहुंच को प्रतिबंधित करने के लिए, यहां स्कीमा निर्माण का एक विकल्प है:

CREATE SCHEMA myschema AUTHORIZATION myrole;

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