विभिन्न स्कीमा संबंधित प्रश्नों मैंने देखा है से प्रेरित होकर ...एसक्यूएल सर्वर: स्कीमा की अनुमति कैसे दें?
Ownership chaining मुझे टेबल मैं उपयोग पर स्पष्ट अनुमतियों के बिना एक संग्रहीत प्रक्रिया पर निष्पादित, अगर दोनों संग्रहीत प्रक्रिया और टेबल एक ही स्कीमा में हैं प्रदान करने के लिए अनुमति देता है।
यदि हम अलग-अलग स्कीमा का उपयोग करते हैं तो मुझे अलग-अलग-स्कीमा तालिकाओं पर XXX को स्पष्ट रूप से अनुदान देना होगा। स्वामित्व श्रृंखला का उदाहरण दिखाता है कि। इसका मतलब है कि संग्रहीत प्रो निष्पादन उपयोगकर्ता सीधे आपकी टेबल को पढ़/लिख सकता है।
यह कक्षा में आपके इंस्टेंस चर के लिए सीधे पहुंच, गेटटर/सेटर्स को छोड़कर, ब्रेकिंग इंकैप्यूलेशन की तरह होगा।
हम जो भी देखते हैं उसे प्रतिबंधित करने के लिए हम पंक्ति स्तर की सुरक्षा का भी उपयोग करते हैं और हम इसे संग्रहीत प्रक्रियाओं में लागू करते हैं।
तो, हम स्कीमा अलगाव को कैसे बनाए रख सकते हैं और सीधे तालिका पहुंच को कैसे रोक सकते हैं?
बेशक, यदि आप ओआरएम का उपयोग करते हैं या संग्रहीत प्रोसेस का उपयोग नहीं करते हैं तो सवाल लागू नहीं होगा। लेकिन मैं अगर मैं एक ORM या संग्रहीत proc मामले में किसी को भी मुझे स्पष्ट करने की जरूरत महसूस करता है का उपयोग करना चाहिए नहीं पूछ हूँ ...
संपादित करें, उदाहरण के
CREATE USER OwnsMultiSchema WITHOUT LOGIN
GO
CREATE SCHEMA MultiSchema1 AUTHORIZATION OwnsMultiSchema
GO
CREATE SCHEMA MultiSchema2 AUTHORIZATION OwnsMultiSchema
GO
CREATE USER OwnsOtherSchema WITHOUT LOGIN
GO
CREATE SCHEMA OtherSchema AUTHORIZATION OwnsOtherSchema
GO
CREATE TABLE MultiSchema1.T1 (foo int)
GO
CREATE TABLE MultiSchema2.T2 (foo int)
GO
CREATE TABLE OtherSchema.TA (foo int)
GO
CREATE PROC MultiSchema1.P1
AS
SELECT * FROM MultiSchema1.T1
SELECT * FROM MultiSchema2.T2
SELECT * FROM OtherSchema.TA
Go
EXEC AS USER = 'OwnsMultiSchema'
GO
--gives error on OtherSchema
EXEC MultiSchema1.P1
GO
REVERT
GO
CREATE PROC OtherSchema.PA
AS
SELECT * FROM MultiSchema1.T1
SELECT * FROM MultiSchema2.T2
SELECT * FROM OtherSchema.TA
Go
GRANT EXEC ON OtherSchema.PA TO OwnsMultiSchema
GO
EXEC AS USER = 'OwnsMultiSchema'
GO
--works
EXEC OtherSchema.PA
GO
REVERT
GO
संपादित करें 2:
- हम "पार डेटाबेस स्वामित्व श्रृंखलन" का उपयोग नहीं करते
- पंक्ति स्तर की सुरक्षा एक रेड हेरिंग और अप्रासंगिक है: हम इसे हर जगह का उपयोग नहीं करते
क्या स्पष्टता के लिए वर्णन कर रहे अलग स्कीमा परिदृश्य का एक कोडित उदाहरण प्रदान करना संभव होगा? अपने परिदृश्य में, क्या दो अलग-अलग स्कीमा में एक ही मालिक है? –
सर्वरफॉल्ट के लिए वोट क्यों बंद करें? यह कोड बंदरों के लिए है, sysadmins नहीं ... – gbn
@ जॉन संसॉम: हाँ मैं करूँगा। – gbn