Làm cách nào để tìm hiểu * tại sao * người dùng có quyền nhất định hiệu quả?


14

Tôi biết rằng tôi có thể truy vấn các quyền hiệu quả bằng cách sử dụng 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          
 ...

Điều này cho tôi biết liệu người dùng hiện tại có quyền CHỌN, CHERTN, CẬP NHẬT, v.v. myTabletrong cơ sở dữ liệu hay không myDatabase.

Có thể dễ dàng tìm ra lý do tại sao người dùng có các quyền này? Ví dụ: tôi muốn có một hàm fn_my_permissions_extạo ra một reasoncột bổ sung :

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

Thật không may, tôi không thể tìm thấy một chức năng như vậy trong tài liệu SQL Server. Có một công cụ hoặc tập lệnh cung cấp chức năng này?


Tại sao bạn không xuất nó thành tệp txt?, bạn đang sử dụng hệ điều hành nào?
jcho360

1
@ jcho360: Không có chức năng fn_my_permission_ex, vì vậy tôi không thể xuất được gì. Tôi đang hỏi nếu có một chức năng hoặc công cụ với chức năng đó .
Heinzi

bạn đang sử dụng SSMS?
jcho360

1
Câu hỏi tuyệt vời. Tôi đã cố gắng để tìm ra điều này trong một thời gian rất dài. fn_my_permissions kinda hoạt động nhưng thường hiển thị các quyền mà tôi không thể theo dõi nguồn gốc.
PseudoToad

Câu trả lời:


8

Bạn có thể tìm thấy một số thông tin tốt về bảo mật từ bài viết dưới đây.

Xem lại quyền của SQL Server | Công nghệ công cộng http://tek.io/KfzEyp

Ngoại trừ:

Truy vấn sau đây sử dụng chế độ xem hệ thống sys.database_permissions để cho biết người dùng nào có quyền cụ thể bên trong cơ sở dữ liệu hiện tại.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.