Bir kullanıcının neden belirli etkin izinlere sahip olduğunu * nasıl öğrenebilirim?


14

Şunu kullanarak etkili izinleri sorgulayabileceğimi biliyorum 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          
 ...

Bu bana geçerli kullanıcının myTableveritabanında SELECT, INSERT, UPDATE vb. İzinleri olup olmadığını söyler myDatabase.

Kullanıcının neden bu izinlere sahip olduğunu kolayca bulmak mümkün müdür ? Örneğin, fn_my_permissions_exek bir reasonsütun çıktısı olan bir fonksiyona sahip olmak isterim :

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

Ne yazık ki, SQL Server belgelerinde böyle bir işlevi bulamadım. Bu işlevi sağlayan bir araç veya komut dosyası var mı?


neden bir txt dosyasına aktarmıyorsunuz? Hangi işletim sistemini kullanıyorsunuz?
jcho360

1
@ jcho360: İşlev yok fn_my_permission_ex, bu yüzden dışa aktarabileceğim bir şey yok. Bununla bir işlev veya aracı olup olmadığını soruyorum işlevselliği .
Heinzi

SSMS kullanıyor musunuz?
jcho360

1
Harika bir soru. Bunu çok uzun zamandır anlamaya çalışıyorum. fn_my_permissions biraz çalışır ama genellikle bir kökeni izleyemiyorum izinleri gösterir.
PseudoToad

Yanıtlar:


8

Güvenlikle ilgili bazı iyi bilgileri aşağıdaki makaleden bulabilirsiniz.

SQL Server İzinlerini Gözden Geçirme | TechRepublic http://tek.io/KfzEyp

Dışında:

Aşağıdaki sorgu, sys.database_permissions sistem görünümünü, hangi kullanıcıların geçerli veritabanı içinde belirli izinlere sahip olduğunu belirtmek için kullanır.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.