ฉันจะทราบได้อย่างไรว่า * ทำไม * ผู้ใช้มีสิทธิ์ที่มีประสิทธิภาพบางอย่าง


14

ฉันรู้ว่าฉันสามารถสอบถามสิทธิ์ที่มีประสิทธิภาพโดยใช้sys.fn_my_permissions:

USE myDatabase;
SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT') 

 entity_name | subentity_name | permission_name 
------------------------------------------------
 dbo.myTable |                | SELECT          
 dbo.myTable |                | UPDATE          
 ...

สิ่งนี้บอกฉันว่าผู้ใช้ปัจจุบันมีสิทธิ์ SELECT, INSERT, UPDATE และอื่น ๆmyTableในฐานข้อมูลmyDatabaseหรือไม่

เป็นไปได้ไหมที่จะค้นหาสาเหตุที่ผู้ใช้มีสิทธิ์เหล่านี้อย่างง่ายดาย ตัวอย่างเช่นฉันชอบมีฟังก์ชันfn_my_permissions_exที่แสดงreasonคอลัมน์เพิ่มเติม:

USE myDatabase;
SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT') 

 entity_name | subentity_name | permission_name | reason
------------------------------------------------------------------------------------------------------------------------------------
 dbo.myTable |                | SELECT          | granted to database role public
 dbo.myTable |                | UPDATE          | member of group MYDOMAIN\Superusers, which belongs to database role db_datawriter
 ...

น่าเสียดายที่ฉันไม่พบฟังก์ชันดังกล่าวในเอกสารคู่มือ SQL Server มีเครื่องมือหรือสคริปต์ที่มีฟังก์ชั่นนี้หรือไม่?


ทำไมคุณไม่ส่งออกเป็นไฟล์ txt คุณใช้ OS อะไร?
jcho360

1
@ jcho360: ไม่มีฟังก์ชั่นfn_my_permission_exดังนั้นฉันไม่สามารถส่งออกได้ ฉันกำลังถามว่ามีฟังก์ชั่นหรือเครื่องมือที่มีฟังก์ชั่นนั้นหรือไม่
Heinzi

คุณใช้ SSMS หรือไม่
jcho360

1
คำถามที่น่ากลัว ฉันพยายามคิดออกมาเป็นเวลานานมาก fn_my_permissions kinda ทำงานได้ แต่มักจะแสดงสิทธิ์ที่ฉันไม่สามารถติดตามลงไปที่จุดกำเนิดได้
PseudoToad

คำตอบ:


8

คุณสามารถหาข้อมูลที่ดีเกี่ยวกับความปลอดภัยได้จากบทความด้านล่าง

ตรวจสอบการอนุญาตเซิร์ฟเวอร์ SQL | TechRepublic http://tek.io/KfzEyp

ยกเว้น:

แบบสอบถามต่อไปนี้ใช้มุมมองระบบ sys.database_permissions เพื่อระบุผู้ใช้ที่มีสิทธิ์เฉพาะภายในฐานข้อมูลปัจจุบัน

SELECT
        dp.class_desc
       ,dp.permission_name
       ,dp.state_desc
       ,ObjectName = OBJECT_NAME(major_id)
       ,GranteeName = grantee.name
       ,GrantorName = grantor.name
    FROM
        sys.database_permissions dp
        JOIN sys.database_principals grantee
        ON dp.grantee_principal_id = grantee.principal_id
        JOIN sys.database_principals grantor
        ON dp.grantor_principal_id = grantor.principal_id
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.