Tôi đang tìm cách tốt nhất để vô hiệu hóa quyền truy cập vào sys.tables
/ Information Schema
cho người dùng / nhóm trong SQL Server.
Tôi tìm thấy chủ đề này từ năm 2008
Nó cho thấy một cách để từ chối truy cập [sys].[something]
như vậy:
DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
GO
Nhưng không có cách nào để vô hiệu hóa quyền truy cập vào Information Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
Điều này dường như không hoạt động.
Làm cách nào tôi có thể vô hiệu hóa quyền truy cập vào information_schema?
Và có cách nào dễ dàng hơn để vô hiệu hóa quyền truy cập vào tất cả sys
/ information_schema
?
Cập nhật: Trên thực tế tôi không thể chạy cả hai câu lệnh sau:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO
GO
Tôi đã cố chạy chúng trên DB cụ thể nơi Người dùng tồn tại và tôi cũng đã thử trên "bản gốc".
Tôi vẫn có thể chạy:
SELECT * from
INFORMATION_SCHEMA.TABLES
-> vẫn trả về kết quả
SELECT * from
sys.TABLES
-> không có kết quả nữa
Bao gồm SCHEMA::
trong truy vấn, có thể tạo các bảo mật
DENY SELECT ON SCHEMA::[sys] TO reducedDBO
GO
DENY SELECT ON SCHEMA::INFORMATION_SCHEMA To reducedDBO
GO
Nhưng bây giờ tôi vẫn có thể chọn tất cả thông tin từ DB.
Tôi đã xem "Bảo mật" -Tab trong cửa sổ Thuộc tính người dùng trong Management Studio 2008, nó trông như thế này:
Mục nhập chặn khối chọn của sys.tables
Lược đồ: sys, Tên: bảng, Loại: Xem
Quyền cho sys.tables: Quyền: Chọn, Nhà tài trợ: dbo, Từ chối được chọn
Mục nhập không chặn bất kỳ lựa chọn nào
Lược đồ:, Tên: THÔNG TIN_SCHema, Loại: Lược đồ
Quyền cho Information_SCHema: Quyền: Chọn, Nhà tài trợ: dbo, Từ chối KHÔNG được kiểm tra (Tôi đã cố kiểm tra nhưng không có cơ hội ..)
Quyền: Chọn, Nhà tài trợ: THÔNG TIN_SCHema, Từ chối được chọn
Tôi đã cố gắng thiết lập các quyền trên GUI, nhưng sau đó tôi gặp cùng một lỗi rằng việc thiết lập quyền chỉ có thể có trên DB chính. Nhưng tôi không có người dùng / đăng nhập được thêm vào bảo mật DB chính.
Giải pháp:
Cách duy nhất tôi có thể thực hiện deny
công việc cho information_schema
là thêm người dùng vào master-db và chạy deny select
trên master:
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GO
Và như trong mã này, nó chỉ có thể được thực thi cho các bảng đơn lẻ.