กลุ่มโฆษณาใดเข้าสู่ระบบผู้ใช้ของฉันเป็นของ?


13

ฉันไม่แน่ใจว่าฉันเลือกชื่อที่ถูกต้องสำหรับคำถามนี้หรือไม่ สิ่งที่ฉันเป็นจริงหลังจากได้รับผู้ใช้โฆษณา windows แต่ละฉันต้องการค้นหารายชื่อกลุ่มโฆษณา windows (เข้าสู่ระบบ) ที่มีการเข้าถึงฐานข้อมูลเฉพาะในเซิร์ฟเวอร์นี้

เมื่อฉันเรียกใช้แบบสอบถามต่อไปนี้

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 Corporation Standard Edition (64 บิต) บน Windows NT 6.1 (รุ่น 7601: Service Pack 1)

ฉันได้รับผลลัพธ์ต่อไปนี้ (รายการบางส่วน):

ป้อนคำอธิบายรูปภาพที่นี่

ฉันจำเป็นต้องทราบสิทธิ์ทั้งหมดที่มีในการเข้าสู่ระบบโดยเฉพาะ การเข้าสู่ระบบนี้มีการเข้าถึงเซิร์ฟเวอร์ / ฐานข้อมูลของฉันผ่านกลุ่มโฆษณา

1) กลุ่มโฆษณาใดจากรายการด้านบนเข้าสู่ระบบของฉันอยู่หรือไม่

ป้อนคำอธิบายรูปภาพที่นี่

ฉันได้ทำสิ่งนี้ด้านล่าง แต่ฉันต้องการค้นหารายชื่อกลุ่มโฆษณา (ที่มีการเข้าถึงเซิร์ฟเวอร์นี้ตามภาพด้านบน) ที่ผู้ใช้รายนี้เป็นเจ้าของ

ก่อนอื่นฉันเรียกใช้งานในฐานะผู้ใช้ที่มีปัญหา

    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

กลุ่มโฆษณาใดจากรายการด้านบนเข้าสู่ระบบของฉันอยู่หรือไม่

สิ่งที่คุณต้องทำคือดำเนินการคำสั่งต่อไปนี้:

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

หากบัญชีไม่สามารถเข้าถึงผ่านกลุ่มใด ๆ บนเซิร์ฟเวอร์นั้นและเป็นบัญชีที่ถูกต้องในโดเมนคุณจะไม่ได้รับการบันทึกกลับ permission pathหากผู้ใช้จะพบว่ามีสิทธิ์ที่คุณสามารถระบุกลุ่มที่พวกเขามีการเข้าถึงจากโดยการตรวจสอบ สิ่งนี้จะส่งคืนกลุ่มdomain\groupnameที่ให้สิทธิ์การเข้าถึงแก่ผู้ใช้โดเมน


4

ที่จะตอบคำถามของคุณโดยเฉพาะวิธีที่ง่ายที่สุดที่ฉันได้พบจะได้รับรายชื่อของกลุ่มผู้ใช้ AD เป็น (จาก SQL Server) คือการใช้sys.login_tokenหรือsys.user_token

คุณจะต้องใช้EXECUTE AS LOGIN =แบบเดียวกับที่คุณทำข้างต้น แต่เมื่อคุณแอบอ้างเป็นชื่อเข้าสู่ระบบคุณสามารถสอบถามsys.login_tokenเพื่อรับรายชื่อกลุ่มที่เข้าสู่ระบบอยู่ ซึ่งรวมถึงบทบาทระดับเซิร์ฟเวอร์และกลุ่มโฆษณาทั้งหมด มีคอลัมน์ principal_id ที่ลิงก์ไปยังsys.server_principalsมุมมองระบบ sys.server_principalsมันจะได้รับการเติมเต็มในทุกบทบาทของเซิร์ฟเวอร์และสำหรับกลุ่มการโฆษณาที่มีรายการใน

หากต้องการรับข้อมูลเฉพาะฐานข้อมูลเพิ่มเติมคุณสามารถไปที่ฐานข้อมูลที่คุณสนใจและใช้sys.user_tokenเพื่อรับรายการบทบาท / กลุ่มโฆษณาที่เชื่อมโยงกับฐานข้อมูลนั้น ในกรณีนี้ principal_id sys.database_principalsมีความเกี่ยวข้องกับ


เคนเน็ ธ คุณเป็นตำนาน สคริปต์เขียนและบันทึก!
โอรีโอ

2

หากฉันเข้าใจถูกต้องคุณสามารถดำเนินการได้ด้วยความช่วยเหลือของxp_logininfoซึ่งส่งคืนข้อมูลเกี่ยวกับผู้ใช้ Windows และกลุ่ม Windows

พูดโดยดำเนินการอย่างง่าย ๆ

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.