รายการการเข้าสู่ระบบเซิร์ฟเวอร์ SQL ที่มีอยู่และผู้ใช้


14

ฉันรู้ว่าเราสามารถตรวจสอบการเข้าสู่ระบบและผู้ใช้ที่กำหนดโดยใช้ GUI ใน SQL Server แต่ฉันสงสัยว่าเราสามารถตรวจสอบนี้ได้โดยใช้สคริปต์

ฉันเรียกใช้แบบสอบถามด้านล่าง แต่แสดงให้เห็นว่า Principal_id ซึ่งฉันไม่แน่ใจว่าจะแมปอย่างไรเพื่อรับระดับสิทธิ์

SELECT * FROM Sys.login_token 

ดังนั้นจึงมี proc ที่เก็บไว้ในตัวที่สามารถแสดงรายการการเข้าสู่ระบบและผู้ใช้ที่มีระดับสิทธิ์ของพวกเขา ?

ขอขอบคุณ.


กำหนด "ระดับสิทธิ์" สิทธิ์ของวัตถุ, การเป็นสมาชิกฐานข้อมูล, การเป็นสมาชิกของบทบาทเซิร์ฟเวอร์?
mrdenny

เมื่อสงสัยให้เปิด Profiler กับ Management Studio แล้วดูว่ามันทำอะไร
Jon Seigel

คำตอบ:


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ซึ่งจะช่วยในการทำซ้ำสิทธิ์เหล่านั้นหากคุณย้ายเซิร์ฟเวอร์ :)
NateJ

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

ฉันหวังว่านี่จะช่วยคุณได้

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