Перелік наявних входів і користувачів SQL Server


14

Я знаю, що ми можемо перевірити вхідні дані та визначених користувачів, використовуючи графічний інтерфейс на SQL Server, але мені цікаво, як ми можемо це перевірити за допомогою скрипту.

Я запустив запит нижче, але він показує Principal_id, який я не знаю, як зробити карту, щоб отримати рівень дозволу.

SELECT * FROM Sys.login_token 

Так чи є вбудована зберігається програма, яка може перераховувати входи та користувачі з їх рівнем дозволу ?

Дякую.


Визначте "рівень дозволу". Права об’єкта, членство в ролі бази даних, членство в ролі сервера?
mrdenny

Коли ви сумніваєтесь, увімкніть Profiler проти Management Studio і подивіться, що це робить.
Джон Сейгель

Відповіді:


14

Не впевнений, чи існує вбудований спосіб, але спробуйте цей запит для головних серверів:

;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

В основному те, що він робить, отримує дозволи і відмовляє, і об'єднує його з членством у ролі. Він повинен коротко ознайомитись із безпекою входу в сервер. Дайте мені знати, якщо це те, що ви шукаєте.


Це було дуже корисно! Я додав рядкове конкатенацію, щоб "показати мені команду надати / відкликати дозволи для кожного перерахованого входу", як-от так - CAST([srvperm].[state_desc] AS VARCHAR(MAX)) + ' ' + CAST(srvperm.[permission_name] AS VARCHAR(MAX)) + ' TO [' + CAST(srvprin.name AS VARCHAR(MAX)) + '];' as GrantQueryщо допомагає повторити ці дозволи, якщо ви
мігруєте

8

Спробуйте це - тут буде перераховано користувачів, об'єкти та дозволи, які вони мають на ці об’єкти:

SELECT p.name, o.name, d.*
FROM sys.database_principals AS p
JOIN sys.database_permissions AS d ON d.grantee_principal_id = p.principal_id
JOIN sys.objects AS o ON o.object_id = d.major_id

Також слід перевірити функцію sys.fn_my_permissions:

http://msdn.microsoft.com/en-us/library/ms188367.aspx

Ось декілька посилань, які також можуть вам допомогти:

ВИМОГИ: http://msdn.microsoft.com/en-us/library/ms191291.aspx

SYS.DATABASE_PERMISSIONS: http://msdn.microsoft.com/en-us/library/ms188367.aspx

Я сподіваюся, що це вам допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.