मैं SQL सर्वर में उपयोगकर्ता / समूह के लिए sys.tables
/ तक पहुँच को निष्क्रिय करने का सबसे अच्छा तरीका ढूंढ रहा हूँ Information Schema
।
मुझे यह धागा 2008 से मिला
यह इस तरह से उपयोग करने से इनकार करने का एक तरीका दिखाता है [sys].[something]
:
DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
GO
लेकिन इस पर पहुंच को अक्षम करने का कोई तरीका नहीं Information Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
यह काम नहीं लगता है।
मैं info_schema तक पहुंच को कैसे अक्षम कर सकता हूं?
और वहाँ एक आसान तरीका है सभी के लिए उपयोग अक्षम sys
/ information_schema
?
अपडेट: वास्तव में मैं दोनों ओटी को निम्न स्टेटमेंट्स में नहीं चला सकता:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO
GO
मैंने उन्हें विशिष्ट डीबी पर चलाने की कोशिश की जहां उपयोगकर्ता मौजूद है, और मैंने "मास्टर" पर भी कोशिश की।
मैं अभी भी चला सकता हूं:
SELECT * from
INFORMATION_SCHEMA.TABLES
-> अभी भी परिणाम देता है
SELECT * from
sys.TABLES
-> अब कोई परिणाम नहीं
SCHEMA::
क्वेरी में शामिल करने से securables बनाना संभव हो गया है
DENY SELECT ON SCHEMA::[sys] TO reducedDBO
GO
DENY SELECT ON SCHEMA::INFORMATION_SCHEMA To reducedDBO
GO
लेकिन अब मैं अभी भी डीबी से सभी जानकारी का चयन कर सकता हूं।
मैंने "Securables" पर एक नजर डाली थी -टैब में उपयोगकर्ता प्रॉपर्टी-विंडो मैनेजमेंट स्टूडियो 2008 में, यह इस तरह दिखता है:
एंट्री जो sys.tables के सेलेक्शन को ब्लॉक करती है
स्कीमा: sys, नाम: टेबल, प्रकार: देखें
Sys.tables के लिए अनुमतियाँ: अनुमति: चयन करें, अनुदान: dbo, इनकार की जाँच की जाती है
प्रवेश जो किसी भी चयन को अवरुद्ध न करें
स्कीमा :, नाम: INFORMATION_SCHEMA, प्रकार: स्कीमा
सूचना के लिए अनुमतियां
अनुमति: चुनें, अनुदान: INFORMATION_SCHEMA, अस्वीकार की जाँच की जाती है
मैंने GUI पर अनुमतियाँ सेट करने का प्रयास किया, लेकिन फिर मुझे वही त्रुटि मिलती है कि अनुमतियाँ सेट करना केवल मास्टर DB पर संभव होगा। लेकिन मेरे पास मास्टर DBs सुरक्षा में जोड़ा गया उपयोगकर्ता / लॉगिन नहीं है।
समाधान:
जिस तरह से मैं मास्टर-डीबी के लिए उपयोगकर्ता को जोड़ने और मास्टर पर चलाने के deny
लिए काम कर सकता information_schema
था :deny select
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GO
और इस कोड में, यह केवल एकल तालिकाओं के लिए निष्पादित किया जा सकता है।