2012-02-20 44 views
5

मैं अपने दृश्य स्टूडियो डाटाबेस परियोजना द्वारा उत्पन्न स्क्रिप्ट के माध्यम से जा रहा था और मैंने पाया इस:"अंतराल पर अनुदान कनेक्ट [sa]" क्या करता है?

GRANT CONNECT 
    ON ENDPOINT::[TSQL Default TCP] TO PUBLIC 
    AS [sa]; 

मैं नहीं जानता कि यह क्या करता है, लेकिन यह एसए (के रूप में सार्वजनिक पहुँच प्रदान करने के लगता है बस कैसे यह द्वारा पढ़ता है)।

कोई भी जानता है कि यह वास्तव में क्या करता है? (Clearly it grants some access via an "ENDPOINT"। लेकिन सादे अंग्रेजी में यह क्या करता है?)

बस इसे पढ़कर, यह मुझे बताता है कि टीसीपी पोर्ट के माध्यम से कनेक्ट करने वाला कोई भी [sa] चला सकता है। (मुझे उम्मीद है कि यह सही नहीं है, लेकिन यदि ऐसा है, तो विजुअल स्टूडियो की डीबी प्रोजेक्ट ऐसा क्यों करेगी?)

उत्तर

4

प्रारंभ करने के लिए, अनुदान एक स्पष्ट कारण के लिए गलत है: यह अनुदानकर्ता के लिए [PUBLIC] नाम का उपयोग करता है, लेकिन यह [public] होना चाहिए। एक केस संवेदनशील स्थापना पर नाम हल नहीं होगा।

अब आपके प्रश्न के बारे में: AS [sa] भाग अनुमति देने की कार्रवाई के लिए प्रासंगिक है, यह अनुदानकर्ता को स्थानांतरित नहीं करता है।

मैं, [sa] के नाम पर, [public] समूह के सदस्यों को [TSQL Default TCP] समाप्ति बिंदु को जोड़ने का विशेषाधिकार देना: यह कुछ इस तरह पढ़ी।

विशेष रूप से, यह नहीं मतलब है कि अनुदान ([public] के सदस्य) [sa] को ऊपर उठाया जा करने के लिए कर रहे हैं नहीं करता है। कनेक्ट अनुमति अनुदान एक आवश्यक है लेकिन डेटाबेस से कनेक्ट करने के लिए पर्याप्त विशेषाधिकार नहीं है। अनुदानदाता को अभी भी डेटाबेस तक पहुंचने की अनुमति की आवश्यकता होगी (यानी उपयोगकर्ता को डेटाबेस में लॉग इन करने के लिए मैप किया गया है)। साथ ही, [public] सर्वर प्रिंसिपल को कनेक्ट अनुमति देने के लिए BUILTIN\Everyone (या BUILTIN\ANONYMOUS LOGIN) के लिए लॉगिन बनाने के बराबर नहीं है ...) सुरक्षा प्रिंसिपल (या अन्य built-in account) ... दूसरे शब्दों में एक एनटी उपयोगकर्ता जिसका लॉगिन नहीं है (एनटी समूह सदस्यता के माध्यम से स्पष्ट या निहित) SQL सर्वर में अभी भी उदाहरण से कनेक्ट करने में सक्षम नहीं होगा।

एक तरफ ध्यान दें के रूप में, किसी भी ब्रांड के नए स्थापना पर निम्न क्वेरी चल पता चलता है कि अनुमति डिफ़ॉल्ट T-SQL endpoint पहले से ही [public] को दी जाती है से कनेक्ट करने के:

select s.name as grantee, 
    e.name as endpoint, 
    p.permission_name as permission, 
    p.state_desc as state_desc 
from sys.server_permissions p 
join sys.server_principals s on s.principal_id = p.grantee_principal_id 
join sys.endpoints e on p.major_id = e.endpoint_id 
where p.type='CO'