मेरे उपयोगकर्ता किस AD समूह से जुड़ते हैं?


13

मुझे यकीन नहीं है कि मैंने इस सवाल के लिए सही शीर्षक चुना है। मैं वास्तव में उसके बाद क्या कर रहा हूं, एक व्यक्तिगत विंडो AD उपयोगकर्ता को दी गई है, मैं उन विंडोज़ AD समूहों (लॉगिन) की सूची का पता लगाना चाहूंगा जिनके पास इस सर्वर में एक विशिष्ट डेटाबेस तक पहुंच है

जब मैं निम्नलिखित प्रश्न चलाता हूं

select
    name,
    principal_id,
    type,
    type_desc,
    default_schema_name,
    create_date,
    modify_date,
    owning_principal_id,
    sid,
    is_fixed_role
from sys.database_principals

मेरे सर्वर में

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) जून 17 2011 00:54:03 कॉपीराइट (c) Microsoft NT मानक संस्करण (64-बिट) Windows NT 6.1 पर (बिल्ड 7601: सर्विस पैक 1)

मुझे निम्नलिखित परिणाम मिले (आंशिक सूची):

यहाँ छवि विवरण दर्ज करें

मुझे उन सभी अनुमतियों को जानना होगा जो किसी विशेष लॉगिन की हैं। इस लॉगिन में AD समूहों के माध्यम से मेरे सर्वर / डेटाबेस तक पहुँच है।

1) उपरोक्त सूची में से AD समूह, मेरा लॉगिन किससे संबंधित है?

यहाँ छवि विवरण दर्ज करें

मैं यह कर रहा हूं, नीचे, लेकिन मैं वास्तव में विज्ञापन समूहों की सूची (जो उपरोक्त चित्र के अनुसार इस सर्वर तक पहुंच है) का पता लगाना चाहेंगे।

पहले मैं प्रश्न में उपयोगकर्ता के रूप में निष्पादित करता हूं

    EXECUTE AS LOGIN='mycompany\HThorne'

    DECLARE @User VARCHAR(20)
    SELECT @USER = SUBSTRING(SUSER_SNAME(), 
CHARINDEX('\', SUSER_SNAME()) + 1, LEN(SUSER_SNAME()))

मुझे यकीन है कि मेरे पास सही साख है

    SELECT   @USER 
            , SUSER_SNAME()
            ,SYSTEM_USER
            , USER_NAME()
            , CURRENT_USER
            , ORIGINAL_LOGIN()
            , USER
            ,SESSION_USER

मैं विशिष्ट डेटाबेस पर जाता हूं और fn_my_permissions का उपयोग करता हूं - प्रश्न में उपयोगकर्ता के रूप में चलता हूं

    use WebDataImportStage
    go
    SELECT * FROM fn_my_permissions (NULL, 'DATABASE');
    GO

    REVERT

और वह मुझे नीचे परिणाम दे रहा है:

यहाँ छवि विवरण दर्ज करें

जवाबों:


17

उपरोक्त सूची में से AD समूह, मेरा लॉगिन किससे संबंधित है?

आपको बस निम्नलिखित कमांड को निष्पादित करना है:

EXEC xp_logininfo 'domain\useraccount','all';
GO

यदि उस सर्वर पर किसी समूह के माध्यम से खाते तक पहुंच नहीं है, और डोमेन में एक वैध खाता है, तो आपको कोई रिकॉर्ड वापस नहीं मिलेगा। यदि उपयोगकर्ता के पास अनुमतियाँ हैं, तो आप उस समूह की पहचान कर सकते हैं, जिसकी जाँच करके उनके पास पहुँच है permission path। यह उस समूह को लौटा देगा domain\groupnameजो डोमेन उपयोगकर्ता को एक्सेस दे रहा है।


4

आपके विशिष्ट प्रश्न का उत्तर देने के लिए मैंने जिन समूहों को उपयोगकर्ता (SQL सर्वर से) का विज्ञापन सूची प्राप्त करने का सबसे आसान तरीका बताया है, वह sys.login_token या sys.user_token का उपयोग करना है

EXECUTE AS LOGIN =जैसा आपने ऊपर किया था वैसा ही आपको उपयोग करना होगा लेकिन एक बार जब आप लॉगिन को लागू कर रहे हैं तो आप उन sys.login_tokenसमूहों की एक सूची प्राप्त करने के लिए क्वेरी कर सकते हैं जिनमें लॉगिन होना है। इसमें किसी भी सर्वर स्तर की भूमिका और सभी विज्ञापन समूह शामिल हैं। एक प्रिंसिपल_ड कॉलम है जो sys.server_principalsसिस्टम व्यू से लिंक करता है। यह सभी सर्वर भूमिकाओं के लिए और उन AD समूहों के लिए भरा जाएगा जिनके पास एक प्रविष्टि है sys.server_principals

अधिक डेटाबेस विशिष्ट जानकारी प्राप्त करने के लिए आप उस डेटाबेस पर जा सकते हैं जिसमें आप रुचि रखते हैं और sys.user_tokenउस डेटाबेस से जुड़ी भूमिकाओं / विज्ञापन समूहों की सूची प्राप्त करने के लिए उपयोग करते हैं। इस मामले में Princip_id से संबद्ध है sys.database_principals


केनेथ, आप एक किंवदंती हैं। स्क्रिप्ट लिखी और बचाई!
ओरियो

2

अगर मुझे सही ढंग से समझ में आया है तो आप इसे xp_logininfo की मदद से प्राप्त कर सकते हैं जो विंडोज उपयोगकर्ताओं और विंडोज समूहों के बारे में जानकारी देता है।

सीधे शब्दों में कहें

EXEC xp_logininfo 'mycompany\HThorne'

एल्स आप नीचे दिए गए क्वेरी का उपयोग कर सकते हैं जो मैं अपने रिपॉजिटरी से उपयोग कर रहा हूं, यह सुनिश्चित नहीं है कि मुझे यह कहां से मिला है :), लेकिन फिर भी यह उपयोगी हो सकता है:

;with ServerPermsAndRoles as
(
    select
        spr.name as principal_name,
        spr.type_desc as principal_type,
        spm.permission_name collate SQL_Latin1_General_CP1_CI_AS as security_entity,
        'permission' as security_type,
        spm.state_desc
    from sys.server_principals spr
    inner join sys.server_permissions spm
    on spr.principal_id = spm.grantee_principal_id
    where spr.type in ('s', 'u')

    union all

    select
        sp.name as principal_name,
        sp.type_desc as principal_type,
        spr.name as security_entity,
        'role membership' as security_type,
        null as state_desc
    from sys.server_principals sp
    inner join sys.server_role_members srm
    on sp.principal_id = srm.member_principal_id
    inner join sys.server_principals spr
    on srm.role_principal_id = spr.principal_id
    where sp.type in ('s', 'u')
)
select *
from ServerPermsAndRoles
order by principal_name
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.