उपयोगकर्ता SSMS में गैर-डिफ़ॉल्ट स्कीमा में तालिकाओं को नहीं देख सकते हैं


10

मुझे VIEW DEFINITIONअपने एक उपयोगकर्ता के लिए स्कीमा स्तर पर उचित रूप से अनुमति सेट करने में समस्या आ रही है । मैंने स्कीमा बनाया है TestSchemaऔर कुछ तालिकाओं को जोड़ा है। उपयोगकर्ता वर्तमान में अनुमतियाँ पहुंच के लिए सेट और तालिका (संशोधित है SELECT, UPDATE, DELETEके माध्यम से, आदि) dbo_datareaderऔर dbo_datawriterभूमिकाओं। हालाँकि, वे SSMS ऑब्जेक्ट एक्सप्लोरर में किसी भी तालिकाओं को नहीं देख सकते हैं।

मैंने परिभाषाएँ देखने के लिए अनुमति देने का प्रयास किया है:

grant view definition on SCHEMA :: [TestSchema] to [User]

यह काम नहीं किया। मैंने तालिका-स्तरीय अनुमति सेट करने का प्रयास किया:

grant view definition on [TestSchema].[NewTable] to [User]

वह भी काम नहीं किया। फिर मैंने सिर्फ एक कंबल अनुदान की कोशिश की:

grant view definition to [User]

और वह किया था काम; वे अब देख सकते हैं TestSchema, साथ ही साथ उन अन्य स्कीमाओं तक भी पहुँच सकते हैं जिनकी उन्हें पहुँच नहीं होनी चाहिए।

यहां मेरा लक्ष्य उपयोगकर्ता को किसी दिए गए स्कीमा के भीतर सभी तालिकाओं को देखने की अनुमति देना है। मैं इसे कैसे पूरा करूं? अगर मुझे यह डिफ़ॉल्ट रूप से करने में सक्षम होना चाहिए, तो मुझे क्या अनुमतियाँ मिलनी चाहिए जो मुझे नहीं मिल सकती हैं?


मेरे 2008R2 उदाहरण पर जब मैं db_datareader या db_datawriter देता हूं तो वे सभी स्कीमा देख सकते हैं। मुझे एहसास नहीं है कि आप क्या देख रहे हैं, लेकिन इसका मतलब है कि आपके सेटअप और मेरा के बीच एक महत्वपूर्ण अंतर है इसलिए मैं वास्तव में इसका परीक्षण नहीं कर सकता। क्या संस्करण वह सब अलग है या कुछ अन्य सुरक्षा को संशोधित किया गया है?
सेफ्रैडेनबर्ग

@cfradenburg - यह बताना मुश्किल है; यह आईटी द्वारा प्रबंधित एक सर्वर है, इसलिए मुझे यकीन नहीं है कि उन्होंने क्या किया है, और मैं एक SQL सर्वर नौसिखिया हूं, इसलिए मुझे नहीं पता कि क्या देखना है। मुझे लगता है कि मेरे सवाल का हिस्सा है, क्या अन्य अनुमतियाँ / भूमिकाएँ / ??? क्या मुझे यह निर्धारित करने के लिए देखना चाहिए कि क्या यह केवल अनुमतियों द्वारा तय किया जा सकता है?
पलक

क्या उपयोगकर्ता तालिकाओं को क्वेरी कर सकता है? यदि वे क्वेरी कर सकते हैं तो यह SSMS के भीतर एक मुद्दा हो सकता है।
user9164

@ user9164 हां, उपयोगकर्ता तालिकाओं को क्वेरी कर सकते हैं ; यह सिर्फ SSMS के भीतर उन्हें देखने का मुद्दा है।
पलक

जवाबों:


11

संक्षिप्त उत्तर: क्या उपयोग नहीं db_datareaderया db_datawriterया उनके समकक्ष इंकार करते हैं। वे केवल पश्चगामी संगतता के लिए हैं। उनका उपयोग करने से आपके सामने आने वाले मुद्दों जैसे मुद्दों का सामना करना पड़ेगा।

यदि आप प्रिंसिपल ऐलिस को SELECT, INSERT, UPDATE और DELETE परमिशन देना चाहते हैं तो स्कीमा सेल्स में सभी टेबल-वैल्यू ऑब्जेक्ट्स को इस्तेमाल करें।

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;

यदि आप प्रिंसिपल ऐलिस को SELECT, INSERT, UPDATE और DELETE की अनुमति देना चाहते हैं, तो सभी स्कीमाओं में सभी टेबल-वैल्यू ऑब्जेक्ट्स का उपयोग करें।

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

मेटाडेटा दृश्यता तब सही ढंग से काम करेगी।


क्या आपके पास 'पश्चगामी संगतता' बिट के लिए एक स्रोत है? मैं समझता हूं कि स्कीमाओं को पदावनत कर दिया जाता है, लेकिन मुझे भूमिकाओं के बारे में कुछ नहीं मिलता।
स्टिजेन

0

प्रिंसिपल अन्य अनुमतियों पर एक नज़र डालें कहीं न कहीं एक इनकार हो सकता है जो समस्या पैदा कर रहा है। याद रखें एक अनुदान हमेशा एक अनुदान के शीर्ष पर लागू होगा। और जैसा कि आपका सर्वर नहीं है, उस खाते में कुछ भी हो सकता है जिसे आईटी विभाग ने स्थापित किया है।

सर्वर स्तर के लिए इस तरह का उपयोग करें:

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

और डेटाबेस स्तर पर कुछ इस तरह

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO

टिप्पणी के लिए धन्यवाद, मैं सोमवार को काम पर वापस आने पर यह कोशिश करूँगा।
आईकैनकल

0

यह मेरे साथ तब हुआ जब मैंने 2008 SQL2 से 2014 तक हमारे SQL सर्वर को अपग्रेड किया। db_datareader या db_datawriter या उनके इनकार समकक्ष पूरी तरह से 2008R2 में ठीक काम करते हैं लेकिन वे 2014 में काम नहीं करते हैं।

SQL सर्वर 2014 में अनुमति देने के लिए उदाहरण

यदि आप उपयोगकर्ता ऐलिस को SELECT, INSERT, UPDATE और DELETE अनुमतियाँ देना चाहते हैं तो स्कीमा सेल्स में सभी टेबल-वैल्यू ऑब्जेक्ट्स का उपयोग करें।

अनुदान का चयन करें, INSERT, अद्यतन, SCHEMA पर DELETE :: ऐलिस को बिक्री; यदि आप प्रिंसिपल ऐलिस को SELECT, INSERT, UPDATE और DELETE की अनुमति देना चाहते हैं, तो सभी स्कीमाओं में सभी टेबल-वैल्यू ऑब्जेक्ट्स का उपयोग करें।

अनुदान का चयन करें, INSERT, अद्यतन, ऐलिस के लिए DELETE; मेटाडेटा दृश्यता तब सही ढंग से काम करेगी।

संदर्भ [ग्रीनस्टोन वाकर]।


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