2012-07-13 59 views
5

Vì vậy, tôi có một trang web để sử dụng nội bộ theo dõi một loạt số liệu thống kê cho nhân viên. Một trong số đó là liệu họ có thiếu sót bất kỳ báo cáo nào không. Vì danh sách các mục không có báo cáo chỉ được cập nhật vài ngày một lần và có thời gian gia hạn 3 ngày trên các báo cáo này, tôi so sánh Ngày (releaseDt) rằng mục đã được ghi lại là thiếu báo cáo cho lần cuối cùng cơ sở dữ liệu được cập nhật (@lastupdate). Bằng cách này, nếu cơ sở dữ liệu báo cáo chưa cập nhật nhưng báo cáo đã hoàn tất, trang web không phải là một người nào đó đang bỏ lỡ một báo cáo.Quyền truy cập vào sys.dm_db_index_usage_stats

Mã SQL hoạt động tốt với quyền quản trị cấp quản trị, nhưng vì lý do hiển nhiên, tôi không cho phép tài khoản ASP.NET có cấp quản trị máy chủ.

Tôi đã thiết lập tài khoản SQL mà mã ASP.NET C# sử dụng để đăng nhập và quyền đối với mọi thứ khác đều ổn. (Chỉ đọc truy cập cho các cơ sở dữ liệu cụ thể mà nó sử dụng.) Tôi không thể tìm ra những gì để cung cấp cho nó quyền truy cập để có quyền truy cập để đọc cái nhìn quản lý năng động cụ thể này.

Sẽ đánh giá cao các đề xuất bằng cách sử dụng Management Studio hoặc sử dụng câu lệnh SQL GRANT.

này dường như đã thông tin liên quan về quan điểm trong câu hỏi:

sys.dm_db_index_usage_stats (Transact-SQL)

DECLARE @lastupdate datetime 
    SELECT @lastupdate = last_user_update from sys.dm_db_index_usage_stats 
    WHERE OBJECT_ID = OBJECT_ID('MissingReport') 

SELECT 
    COALESCE(Creator, 'Total') AS 'Creator', 
    COUNT(*) AS Number, 
    '$' + CONVERT(varchar(32), SUM(Cost), 1) AS 'Cost' 
    FROM MissingReport 
    WHERE NOT( 
     [bunch of conditions that make something exempt from needing a report] 
     OR 
     (
      DATEDIFF(day,ReleaseDt,@lastupdate) <= 3 
     ) 
    ) 
    GROUP BY Creator WITH ROLLUP 
+2

Chỉ cần cho rõ ràng về mặt hình ảnh, đó là 'chế độ xem quản lý động', không phải là 'bảng hệ thống'. –

+0

Đã sửa lỗi đó. – sylverfyre

+0

Chắc chắn, tôi không nghĩ rằng mã hoặc cốt truyện có liên quan - câu hỏi có thể là một hoặc hai lớp mà không mất bất kỳ ý nghĩa nào. –

Trả lời

11

Bạn không thể cấp SELECT trên DMVs, vì đây được ngăn chặn bởi chính sách cho DMVs server-scoped:

GRANT SELECT ON sys.dm_db_index_usage_stats TO peon; 

Kết quả trong:

Msg 4629, cấp 16, tiểu bang 10, dòng 1
Quyền trên chế độ xem danh mục phạm vi máy chủ hoặc quy trình được lưu trữ hệ thống hoặc thủ tục được lưu trữ mở rộng chỉ có thể được cấp khi cơ sở dữ liệu hiện tại chính.

BOL page you referenced cho bạn biết rằng bạn cần cấp VIEW SERVER STATE. Bạn sẽ áp dụng điều này cho thông tin đăng nhập từ chính:

USE master; 
GO 
GRANT VIEW SERVER STATE TO peon; 
-- if it's a Windows login then: 
GRANT VIEW SERVER STATE TO [Domain\peon]; 

Nhưng không có cách nào để thực hiện việc này cho mỗi cơ sở dữ liệu. Không phải là tất cả những gì bạn quan tâm, vì ngay cả khi ai đó có thể tìm ra cách để hack vào máy chủ của bạn bằng chứng chỉ tài khoản ASP.NET, tất cả những gì họ có thể làm là xem trạng thái máy chủ, họ không thể thay đổi bất kỳ thứ gì.

+0

Nghe đúng, đã thử điều đó, nhưng thông tin đăng nhập quản trị của tôi (có vai trò máy chủ 'sysadmin' - chỉ cần kiểm tra lại - đưa ra lỗi' Người cấp quyền không có quyền GRANT.' – sylverfyre

+1

@sylverfyre những gì có năng suất này: 'SELECT permission_name FROM sys.fn_my_permissions (NULL, N'server '); '(Đừng liệt kê chúng trong một chú thích, nhưng có bao nhiêu hàng ở đó, và những thứ quan trọng như' ALTER ANY LOGIN' bị thiếu?) –

+0

Yeah, no 'ALTER ANY LOGIN' Odd , bởi vì khi tôi nhìn vào menu tương ứng trong studio quản lý, tôi có 'ALTER ANY LOGIN' cũng như tất cả những thứ khác như' ALTER ANY CREDENTIAL'. – sylverfyre

Các vấn đề liên quan