USER और EXECUTE AS LOGIN के रूप में EXECUTE के बीच क्या अंतर है जो अप्रत्याशित रूप से व्यवहार करता है?


10

हाल ही में मैं जाँच करने के लिए लॉग इन का उपयोग कर रहा हूँ कि क्या कोई निश्चित व्यक्ति हमारे किसी डेटाबेस में टेबल फ़ंक्शन का उपयोग कर सकता है या नहीं। परीक्षणों से पता चला कि वह कर सकता था लेकिन उसने बार-बार विफलता की सूचना दी।

व्यक्ति डेटाबेस से जुड़ने के लिए लॉगिन 'वेब' का उपयोग करता है और उसके पास उस डेटाबेस में उपयोगकर्ता 'वेब' है, जो लॉगिन 'वेब' से जुड़ा है, इसलिए मैंने निम्नलिखित स्क्रिप्ट की कोशिश की:

-- part 1
EXECUTE AS USER = 'WEB'
GO
SELECT 
    USER_NAME() AS 'user_name'
    ,SUSER_NAME() AS 'suser_name'
    ,SUSER_SNAME() AS 'suser_sname'
    ,SYSTEM_USER AS 'system_user'
GO
REVERT
GO

तथा

-- part 2
EXECUTE AS LOGIN = 'WEB'
GO
SELECT 
    USER_NAME() AS 'user_name'
    ,SUSER_NAME() AS 'suser_name'
    ,SUSER_SNAME() AS 'suser_sname'
    ,SYSTEM_USER AS 'system_user'
GO
REVERT
GO

पहले भाग के परिणाम के साथ ठीक था:

वेब | वेब | वेब | वेब

लेकिन दूसरा परिणाम थोड़ा भ्रमित करने वाला था:

dbo | वेब | वेब | वेब

USER के रूप में EXECUTE AS और EXECUTE AS LOGIN के बीच अंतर क्या है जो दूसरा विफल रहता है? इसके अलावा, निश्चित रूप से, पहला डेटाबेस स्तर और दूसरा सर्वर लेवल इंपर्सनेशन है, जिसकी मुझे जानकारी है और जो यहां की स्थिति की व्याख्या नहीं करता है।


दूसरा एक "विफल" नहीं है, यह सिर्फ आपको बता रहा है कि लॉगिन में एक सर्वर रोल (sysadmin) सौंपा गया है। क्या आपने स्कीमा की जांच की है जो उपयोगकर्ता द्वारा अनुरोध किया जा रहा है? इससे पहले कि जहां डीबीओ डिफ़ॉल्ट स्कीमा नहीं है वह देवों ने होने की उम्मीद की थी। पूरी तरह से तालिका को संदर्भित करके कोड में बेहतर है
स्टुअर्ट मूर

जवाबों:


7

sysadminसमूह का सदस्य हमेशा मैप किया जाता है dbo, भले ही उसका डेटाबेस में कोई स्पष्ट उपयोगकर्ता हो। तो ऐसा लगता है कि लॉगिन WEBका सदस्य है sysadmin, इसलिए दूसरे मामले में USER_NAME()सही ढंग से रिटर्न dboकरता है।


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

इसका यह भी अर्थ है कि आपके आवेदन (रिपोर्ट?) में एक sysadmin सदस्य की अनुमति है। देखो कैसे अनुमति पदानुक्रम में वास्तव में यह दी गई है। संभावना है कि अब भी रिपोर्ट, यदि यह चाहे तो किसी अन्य sysadminसदस्य को प्रतिरूपित कर सकता है , इसलिए रिपोर्टिंग एप्लिकेशन एक डी-फैक्टो सिस्मिन है। अर्थात। विशेषाधिकारों पर हमला करने वाले लोगों की संभावित ऊंचाई, इसका उपयोग आपके कर्मचारी द्वारा हैकर या, अधिक संभावना के साथ किया जा सकता है।
रेमस रूसु

यदि रेपॉर ऐप पर WEBआवश्यक अनुमति है और फिर WEBउसे हटा दिया गया sysadminतो दरवाजा बंद कर दिया गया। लेकिन कम किसी की जाँच के लायक है।
रेमस रुसानु

हां, हमें एक बार फिर से अधिकारों को प्रभावित करने वाली हर चीज की जांच करनी होगी कि क्या इस तरह से अन्य मुद्दे "निश्चित" थे या नहीं। अभी बहुत खुश नहीं हैं :( फिर से धन्यवाद,
रेमुस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.