a quali gruppi AD accede il mio utente appartiene?


13

Non sono sicuro di aver scelto il titolo giusto per questa domanda. quello che sto veramente cercando è, dato un singolo utente di Windows AD, vorrei scoprire l'elenco dei gruppi di Windows AD (accessi) che hanno accesso a un database specifico in questo server

quando eseguo la seguente query

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

nel mio server

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 17 giugno 2011 00:54:03 Copyright (c) Microsoft Corporation Standard Edition (64-bit) su Windows NT 6.1 (Build 7601: Service Pack 1)

Ottengo i seguenti risultati (elenco parziale):

inserisci qui la descrizione dell'immagine

Devo conoscere tutte le autorizzazioni di un determinato accesso. questo accesso ha accesso al mio server / database tramite gruppi AD.

1) a quali gruppi AD, dall'elenco sopra, appartiene il mio login?

inserisci qui la descrizione dell'immagine

Lo sto facendo di seguito, ma vorrei davvero scoprire l'elenco dei gruppi AD (che hanno accesso a questo server in base all'immagine sopra) a cui appartiene questo utente.

Per prima cosa eseguo come utente in questione

    EXECUTE AS LOGIN='mycompany\HThorne'

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

mi assicuro di avere le giuste credenziali

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

Vado al database specifico e utilizzo fn_my_permissions - esegui come utente in questione

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

    REVERT

e questo mi sta dando il risultato qui sotto:

inserisci qui la descrizione dell'immagine

Risposte:


17

a quali gruppi AD, dall'elenco sopra, appartiene il mio login?

Tutto quello che devi fare è eseguire il seguente comando:

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

Se l'account non ha accesso tramite alcun gruppo su quel server e AND è un account legittimo nel dominio, non verrà restituito alcun record. Se si trova che l'utente dispone delle autorizzazioni, è possibile identificare il gruppo dal quale ha accesso controllando il permission path. Ciò restituirà il gruppo domain\groupnameche sta dando l'accesso all'utente del dominio.


4

Per rispondere alla tua domanda specifica il modo più semplice che ho trovato per ottenere un elenco di gruppi AD a cui appartiene un utente (da SQL Server) è utilizzare sys.login_token o sys.user_token .

Dovrai usare il EXECUTE AS LOGIN =metodo come hai fatto sopra, ma una volta che stai impersonando il login puoi fare una query sys.login_tokenper ottenere un elenco di gruppi a cui appartiene il login. Ciò include qualsiasi ruolo a livello di server e tutti i gruppi AD. C'è una colonna principal_id che collega alla sys.server_principalsvista di sistema. Sarà compilato per tutti i ruoli del server e per i gruppi AD che dispongono di una voce sys.server_principals.

Per ottenere ulteriori informazioni specifiche sul database, è possibile accedere al database a cui si è interessati e utilizzare sys.user_tokenper ottenere un elenco di ruoli / gruppi di annunci associati a quel database. In questo caso principal_id è associato sys.database_principals.


Kenneth, sei una leggenda. Script scritto e salvato!
Oreo,

2

Se ho capito bene, puoi farlo con l'aiuto di xp_logininfo che restituisce informazioni sugli utenti di Windows e sui gruppi di Windows.

Dillo semplicemente eseguendo

EXEC xp_logininfo 'mycompany\HThorne'

Altrimenti puoi usare la query di seguito che sto usando dal mio repository, non sono sicuro da dove l'ho preso, :), ma può ancora essere utile:

;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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.