Bagaimana cara mengetahui * mengapa * pengguna memiliki izin efektif tertentu?


14

Saya tahu bahwa saya dapat meminta izin yang efektif dengan menggunakan 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          
 ...

Ini memberitahu saya apakah pengguna saat ini memiliki izin SELECT, INSERT, UPDATE, dll di myTabledalam database myDatabase.

Apakah mungkin untuk dengan mudah mengetahui mengapa pengguna memiliki izin ini? Misalnya, saya ingin memiliki fungsi fn_my_permissions_exyang menampilkan reasonkolom tambahan :

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
 ...

Sayangnya, saya tidak dapat menemukan fungsi seperti itu dalam dokumentasi SQL Server. Apakah ada alat atau skrip yang menyediakan fungsi ini?


mengapa Anda tidak mengekspornya ke file txt ?, OS apa yang Anda gunakan?
jcho360

1
@ jcho360: Tidak ada fungsi fn_my_permission_ex, jadi tidak ada yang bisa saya ekspor. Saya bertanya apakah ada fungsi atau alat dengan fungsi itu .
Heinzi

Apakah Anda menggunakan SSMS?
jcho360

1
Pertanyaan yang luar biasa Saya sudah mencoba mencari tahu hal ini untuk waktu yang sangat lama. fn_my_permissions agak berfungsi tetapi sering menunjukkan izin yang saya tidak dapat melacak ke asal.
PseudoToad

Jawaban:


8

Anda dapat menemukan beberapa informasi baik mengenai keamanan dari artikel di bawah ini.

Meninjau Izin Server SQL | TechRepublic http://tek.io/KfzEyp

Kecuali:

Permintaan berikut menggunakan tampilan sistem sys.database_permissions untuk menunjukkan pengguna mana yang memiliki izin khusus di dalam database saat ini.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.