Trên SQL Server, có thể hạn chế người dùng nhất định sử dụng các chức năng, toán tử hoặc câu lệnh nhất định không?


7

chúng tôi hỗ trợ một số lượng lớn các nhà phát triển và nhà phân tích, những người không biết nhiều hoặc không quan tâm đến hiệu suất truy vấn. Mỗi ngày chúng ta có hàng trăm truy vấn được hình thành kém (cũng do kiến ​​trúc db được thiết kế kém), mỗi lần, lấy đi hàng chục gigabyte RAM từ các máy chủ của chúng ta và có các kế hoạch thực hiện trong phạm vi megabyte được lưu trữ trong bộ đệm SQL.

Chúng tôi muốn hạn chế một số người dùng sử dụng SORT và HASH MATCHes, cụ thể là ĐẶT HÀNG B, NG, CHỌN DISTINCT và THAM GIA dưới mọi hình thức. Mục đích của chúng tôi là cho phép người dùng lấy dữ liệu của họ, nhưng chỉ hoạt động ở phía họ.

Điều này có thể đạt được trong SQL Server không? Có công cụ DB nào hỗ trợ điều đó không? Bạn nghĩ gì về điều này?

Tôi biết điều này sẽ đánh bại nguyên tắc của cơ sở dữ liệu quan hệ, nhưng chúng tôi đang tìm cách nào đó để thực thi rằng công cụ này được sử dụng đúng cách và không bị lạm dụng bởi người dùng không có giáo dục.

Chúng tôi đang xem xét việc triển khai Resource Governor để phân bổ một lượng tài nguyên máy nhất định cho các truy vấn xấu này.

Câu trả lời:


6

Câu trả lời của kevinsky là một con đường hướng tới một giải pháp cho bạn.

Một đường dẫn khác cho vấn đề cụ thể của bạn là tạo (các) máy chủ thứ ba (và có thể là nhà phát triển thứ ba). Với các bản sao của dữ liệu sản xuất. Người báo cáo và người phát triển của bạn có thể làm tất cả các loại ngu ngốc và không ảnh hưởng đến sản xuất.

Có nhiều cách để đạt được điều này, tùy thuộc vào mức độ mới của dữ liệu báo cáo / dev của bạn.

Một giải pháp phổ biến là sao lưu hàng đêm và khôi phục máy chủ thứ cấp. Nếu bạn cần dữ liệu thực sự hiện tại (như không có độ trễ hoặc một giây), hãy nhìn vào SQL Server Luôn bật


có, nếu một máy chủ bổ sung và giấy phép cơ sở dữ liệu không phải là vấn đề thì đây là giải pháp tốt nhất
kevinsky

1
@Kevinsky chỉ sử dụng phiên bản dành cho nhà phát triển - không cần giấy phép cho việc sử dụng không sản xuất. Trừ khi đó là sử dụng sản xuất.
George.Palacios

2

Bạn có thể tạo chế độ xem dữ liệu họ cần và tạo vai trò chỉ cho phép chọn.

Hoặc bạn có thể tạo các thủ tục được lưu trữ trả về một tập kết quả có thể là bất kỳ sự kết hợp nào của các bảng được truy cập với một truy vấn hoạt động tốt.

Tôi không biết cách nào để hạn chế việc sử dụng các lệnh cơ bản trong SQL do một số trình kích hoạt mức cơ sở dữ liệu bị hack và đề nghị rằng nếu bạn có nhiều người dùng không biết cách viết một truy vấn tốt thì giáo dục sẽ hiệu quả hơn cách để làm điều này. Giờ ăn trưa?


1
Có một DBA dừng lại ở bàn / khối của họ ở giữa một SQL chạy dài có thể giúp tập trung vào phiên Ăn trưa & Tìm hiểu. Một cuộc thảo luận nhanh có thể giúp người đó tìm hiểu điều gì đó (ví dụ: "bạn biết, bạn thực sự nên thêm các khóa phân vùng vào mệnh đề WHERE của bạn"). Nó cũng có thể giúp DBA học được điều gì đó (ví dụ: bảng đó thực sự cần chỉ số đó)
Michael Kutz
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.