kullanıcım hangi AD gruplarına giriş yapıyor?


13

Bu soru için doğru başlığı seçip seçmediğimden emin değilim. ne sonra gerçekten, tek bir Windows AD kullanıcı göz önüne alındığında, bu sunucudaki belirli bir veritabanına erişimi olan Windows AD gruplarının (oturum açma) listesini bulmak istiyorum

aşağıdaki sorguyu çalıştırdığımda

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

sunucumda

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 17 Haziran 2011 00:54:03 Telif Hakkı (c) Windows NT 6.1'de Microsoft Corporation Standard Edition (64 bit) (Derleme 7601: Service Pack 1)

Aşağıdaki sonuçları alıyorum (kısmi liste):

resim açıklamasını buraya girin

Belirli bir girişin sahip olduğu tüm izinleri bilmem gerekiyor. bu girişin AD grupları üzerinden sunucum / veritabanlarıma erişimi var.

1) yukarıdaki listeden hangi AD grupları girişe ait?

resim açıklamasını buraya girin

Bunu aşağıda yapıyorum, ama gerçekten bu kullanıcının ait olduğu AD gruplarının (yukarıdaki resme göre bu sunucuya erişimi olan) listesini bulmak istiyorum.

Önce söz konusu kullanıcı olarak yürütüyorum

    EXECUTE AS LOGIN='mycompany\HThorne'

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

doğru kimlik bilgilerine sahip olduğumdan emin olurum

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

Belirli bir veritabanına gidin ve fn_my_permissions kullanın - söz konusu kullanıcı olarak çalıştırın

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

    REVERT

ve bu bana aşağıdaki sonucu veriyor:

resim açıklamasını buraya girin

Yanıtlar:


17

yukarıdaki listeden hangi AD grupları girişe ait?

Tek yapmanız gereken aşağıdaki komutu yürütmektir:

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

Hesabın o sunucudaki herhangi bir grup üzerinden erişimi yoksa VE alan adında yasal bir hesapsa, herhangi bir kayıt döndürülmez. Kullanıcının izinleri olduğu tespit edilirse, erişime sahip olduğu grubu işaretleyerek tanımlayabilirsiniz permission path. Bu domain\groupname, etki alanı kullanıcısına erişim izni veren grubu döndürür .


4

Belirli bir soruyu cevaplamak için bir kullanıcının ait olduğu (SQL Server'dan) AD gruplarının listesini bulmanın en kolay yolu sys.login_token veya sys.user_token kullanmaktır .

EXECUTE AS LOGIN =Yukarıda yaptığınız gibi kullanmak zorunda kalacaksınız ancak giriş kimliğine büründükten sonra sys.login_token, girişin ait olduğu grupların bir listesini almak için sorgulayabilirsiniz . Bu, sunucu düzeyinde tüm rolleri ve tüm AD gruplarını içerir. sys.server_principalsSistem görünümüne bağlanan bir principal_id sütunu vardır . Tüm sunucu rolleri ve girişi olan bir AD grupları için doldurulur sys.server_principals.

Veritabanına özgü daha fazla bilgi almak için, ilgilendiğiniz veritabanına gidebilir ve o veritabanıyla sys.user_tokenilişkili rollerin / AD gruplarının bir listesini almak için kullanabilirsiniz . Bu durumda principal_id ile ilişkilendirilir sys.database_principals.


Kenneth, sen bir efsanesin. Senaryo yazıldı ve kaydedildi!
Oreo

2

Eğer doğru anladıysam bunu Windows kullanıcıları ve Windows grupları hakkında bilgi döndüren xp_logininfo yardımı ile alabilirsiniz .

Sadece uygulayarak söyle

EXEC xp_logininfo 'mycompany\HThorne'

Başka sen benim deposundan kullandığınız aşağıdaki sorgu kullanabilirsiniz, bu nereden bu emin değilim :), ama yine de yardımcı olabilir:

;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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.