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 Schemacho 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
 GONhư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
GOTô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
GONhư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 denycông việc cho information_schemalà thêm người dùng vào master-db và chạy deny selecttrên master:
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GOVà như trong mã này, nó chỉ có thể được thực thi cho các bảng đơn lẻ.