web-dev-qa-db-ja.com

SQL Serverでは、特定のユーザーが特定の関数、演算子、またはステートメントを使用することを制限できますか?

私たちは、クエリのパフォーマンスについてあまり知らないかまったく気にしない多数の開発者とアナリストをサポートしています。私たちは毎日、数百ギガバイトのRAM)をサーバーから吸い取り、メガバイトの範囲の実行計画を持っている、数百ギガバイトの不十分なクエリ(設計が不十分なdbアーキテクチャのため)を毎日持っていますSQLキャッシュに格納されます。

特定のユーザーがSORTとHASH MATCH、特にORDER BY、SELECT DISTINCT、およびJOINを使用することを制限したいと思います。私たちの意図は、ユーザーがデータをプルできるようにすることですが、データの処理はユーザー側でのみ行うことです。

これはSQL Serverで実現できますか?それをサポートするDBエンジンはありますか?これについてどう思いますか?

これはリレーショナルデータベースの原則に勝るものですが、エンジンが適切に使用され、教育を受けていないユーザーに悪用されないようにする方法を探しています。

リソースガバナーの実装を検討して、これらの不良クエリに一定量のマシンリソースを割り当てています。

7
R. Ferraz

kevinskyによる回答 は、解決策への1つの道です。

特定の問題の別の方法は、2番目のレポートサーバー(およびおそらく3番目の開発者)を作成することです。本番データのコピー付き。あなたの報告者と開発者はあらゆる種類の愚かなことをすることができ、生産に影響を与えません。

レポート/開発データの鮮度に応じて、これを実現する方法はいくつかあります。

一般的な解決策は、夜間のバックアップとセカンダリサーバーへの復元です。本当に最新のデータが必要な場合(ラグなし、1秒など)は、 SQL Server Always On を調べてください。

6
James Jenkins

必要なデータのビューを作成し、選択のみを許可するロールを作成できます。

または、パフォーマンスの高いクエリでアクセスしたテーブルの任意の組み合わせである結果セットを返すストアドプロシージャを作成できます。

私は、SQLで基本的なコマンドの使用をいくつかのハッキーデータベースレベルのトリガーを除いて制限する方法を知りません。良いクエリを作成する方法を知らないユーザーが多い場合は、ある程度の教育がより効果的であることをお勧めしますこれを行う方法。ランチタイム?

2
kevinsky