nhóm AD nào đăng nhập người dùng của tôi thuộc về?


13

Tôi không chắc chắn nếu tôi đã chọn đúng tiêu đề cho câu hỏi này. Những gì tôi thực sự theo đuổi là, với một người dùng AD riêng lẻ, tôi muốn tìm hiểu danh sách các nhóm AD (đăng nhập) có quyền truy cập vào cơ sở dữ liệu cụ thể trong máy chủ này

khi tôi chạy truy vấn sau

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

trong máy chủ của tôi

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 17 tháng 6 năm 2011 00:54:03 Bản quyền (c) Microsoft Corporation Standard Edition (64-bit) trên Windows NT 6.1 (Build 7601: Gói dịch vụ 1)

Tôi nhận được các kết quả sau (danh sách một phần):

nhập mô tả hình ảnh ở đây

Tôi cần biết tất cả các quyền mà một đăng nhập cụ thể có. thông tin đăng nhập này có quyền truy cập vào máy chủ / cơ sở dữ liệu của tôi thông qua các nhóm AD.

1) nhóm AD nào, từ danh sách trên, đăng nhập của tôi thuộc về?

nhập mô tả hình ảnh ở đây

Tôi đã làm điều này, bên dưới, nhưng tôi thực sự muốn tìm ra danh sách các nhóm AD (có quyền truy cập vào máy chủ này theo hình trên) mà người dùng này thuộc về.

Đầu tiên tôi thực hiện với tư cách là người dùng trong câu hỏi

    EXECUTE AS LOGIN='mycompany\HThorne'

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

tôi chắc chắn rằng tôi có thông tin xác thực

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

Tôi đi đến cơ sở dữ liệu cụ thể và sử dụng fn_my_permissions - chạy như người dùng trong câu hỏi

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

    REVERT

và đó là cho tôi kết quả dưới đây:

nhập mô tả hình ảnh ở đây

Câu trả lời:


17

Những nhóm AD nào, từ danh sách trên, đăng nhập của tôi thuộc về?

Tất cả bạn cần làm là thực hiện lệnh sau:

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

Nếu tài khoản không có quyền truy cập thông qua bất kỳ nhóm nào trên máy chủ đó, VÀ là tài khoản hợp pháp trong miền, bạn sẽ không nhận được hồ sơ nào. Nếu người dùng được tìm thấy có quyền, bạn có thể xác định nhóm họ có quyền truy cập bằng cách kiểm tra permission path. Điều này sẽ trả về nhóm domain\groupnameđang cấp quyền truy cập cho người dùng tên miền.


4

Để trả lời câu hỏi cụ thể của bạn, cách dễ nhất tôi đã tìm thấy để có danh sách các nhóm AD mà người dùng thuộc (từ SQL Server) là sử dụng sys.login_token hoặc sys.user_token .

Bạn sẽ phải sử dụng EXECUTE AS LOGIN =giống như bạn đã làm ở trên nhưng một khi bạn đang mạo danh đăng nhập, bạn có thể truy vấn sys.login_tokenđể có được danh sách các nhóm mà đăng nhập thuộc về. Điều này bao gồm bất kỳ vai trò cấp máy chủ và tất cả các nhóm AD. Có một cột vice_id liên kết đến sys.server_principalschế độ xem hệ thống. Nó sẽ được điền vào cho tất cả các vai trò máy chủ và cho một nhóm AD có mục nhập sys.server_principals.

Để có thêm thông tin cụ thể về cơ sở dữ liệu, bạn có thể truy cập cơ sở dữ liệu mà bạn quan tâm và sử dụng sys.user_tokenđể nhận danh sách các nhóm vai trò / nhóm AD được liên kết với cơ sở dữ liệu đó. Trong trường hợp này vice_id được liên kết với sys.database_principals.


Kenneth, bạn là một huyền thoại. Kịch bản được viết và lưu lại!
Oreo

2

Nếu tôi hiểu chính xác, bạn có thể thực hiện việc này với sự trợ giúp của xp_logininfo để trả về thông tin về người dùng Windows và các nhóm Windows.

Nói đơn giản bằng cách thực hiện

EXEC xp_logininfo 'mycompany\HThorne'

Khác bạn có thể sử dụng truy vấn bên dưới mà tôi đã sử dụng từ kho lưu trữ của tôi, không chắc chắn nơi tôi đã nhận được điều này, :), nhưng vẫn có thể hữu ích:

;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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.