4

むかしむかし、遠い銀河のはるか彼方で、私は数人の開発者の間の議論の目撃者でした。主題は、エンド ユーザーが自分のデータに対して独自のレポートを作成できるようにするために、実稼働 SQL サーバー (MS SQL 2008) へのアクセスをエンド ユーザーに与えるのが良い考えかどうかでした。

ビジネス関係者からの依頼でした。「お客様がカスタム レポートを作成したい」。

これを提案した男は、次のように主張しました。

  1. 彼は一連のアクセス許可を通じてユーザーに「読み取り専用アクセス」を与え、システムを完全に安全にすることができました。
  2. SQL は最初は「エンドユーザー」言語でしたが、現在はそうかもしれません。
  3. ユーザーは、SQL クエリを実行する権限を持っているため、開発者やサポートを邪魔することなく、自分のやりたいことを実行できます。

これに反対した他の人たちは、次のように主張しました。

  1. 最大でもMS SQLをクラッシュさせるのはかなり簡単です。制限付きアクセス。
  2. いずれにせよ、SQL とデータベース構造をエンド ユーザーに公開するのは得策ではありません。それは悪い設計です。
  3. SQL は非プログラマーにとっては複雑すぎるため、プログラマー以外の作業を楽にするものではありません。

エンド ユーザーに SQL へのアクセスを許可することについてどう思いますか?

前もって感謝します!

4

7 に答える 7

5

ユーザーを読み取り専用アクセスに制限するだけでなく、クエリ ガバナーのコスト制限を有効にすることで、いくつかのことをより安全にすることができます。これにより、クエリを実行する前にクエリのコスト分析が試行され、定義済みのしきい値を超えるとクエリの実行が拒否されます。

これよりもさらに良いのは、複製されたデータベースをクエリに使用できるようにすることです。これは、本番システムのバックアップから実行される別のサーバーと同じくらい単純なものかもしれません。データをどの程度「ライブ」にする必要があるかに応じて、それに応じてバックアップ/復元の間隔を調整できます。

データベースを非プログラマー向けに直接クエリに公開することが良い考えであるかどうかに関しては、ユーザーがどれだけ精通しているかにかかっています。彼らはSQLを教えられますか? 単純なことについては、それほど難しいことではありません。

于 2012-04-17T21:46:35.447 に答える
2

これは、ユーザーに完全に依存します。ユーザーが技術的な能力を持っているか、このスキル セットの開発に関心がある場合は、プログラマーの作業負荷を大幅に軽減できます。

一方で、正規化されたデータ構造を決して理解しない骨の折れる人々を知っており、彼らの暴走したクエリはサーバーを繰り返しクラッシュさせました。

それを選択する場合は、可能であれば、レポート用に別のデータベース ミラーを作成してください。かなり最新のデータが得られるように、毎晩更新します。もちろん、リアルタイムのレポートが必要な場合、これは理想的ではありません。

于 2012-04-17T21:48:21.893 に答える
1

反対の主張は非常に弱いです。ユーザーがSQLを書くことができないなら、なぜ気にするのですか?この多くを処理できるレポート作成ツール (Crystal Reports) があります。

他のソフトウェアを使用している企業の中には、データベースのクエリ方法を知っているか、コンサルタントを雇うことができるスタッフ メンバーがいる場合があります。

データベースへのアクセスが制限されたままでは、企業市場に参入することはできません。

編集: ユーザーのニーズの大部分に対応するために、一連のビューをデータベースに組み込むことができます。これにより、複雑な結合について心配する必要がなくなります。

于 2012-04-17T21:48:07.213 に答える
1

本番データベースに対して独自のクエリを作成するためのアクセス権をエンド ユーザーに与えることの主な問題は、たとえ読み取り専用アクセスであっても、パフォーマンスが床から地下へと低下することです。エンド ユーザーが SQL を記述できる場合、通常はあまりうまく記述できません。ある時点で、カーソルが検出される (MS SQL の場合) か、結合について考えすぎることがあります。彼らは見つけることができるすべてのテーブルを引き込みます。それらを満足させたい場合は、毎晩、別のマシン (または十分に制限された VM) 上の非運用データベースにダンプを行い、自分自身をノックアウトするように指示します。プロのヒント: サポートする時間がないことも伝えてください。

私は反エンドユーザーではありません。効率的な方法でクエリを作成することを信頼できるとは思わないだけです。信頼できると思われる少数の人がいる場合は、その人たちと一緒に試してみて、パスワードを共有した場合はロックアウトしてください。

于 2012-04-17T21:54:06.410 に答える
1

展開後の製品の責任者によって異なります。状況が明らかな場合 (サポートなしですべてのコードを販売している場合)、なぜですか? それはあなたの問題ではありません。

あなたがすべてを処理しなければならず、稼働時間に責任がある状況では、読み取り専用であってもそれを行うことはお勧めしません.

于 2012-04-17T21:56:07.567 に答える
1

データベース アカウントを不要な変更に対して安全にすることはできますが、パフォーマンスの問題に対して安全にすることはできません。エンド ユーザーは、すべてのテーブルをロックして長時間実行するクエリを簡単に作成できます。実際にデータベースがクラッシュすることはありませんが、ユーザーはクラッシュとして経験します。

システムがハングする可能性があるレポート機能に問題がない場合は、先に進むことができます。

しかし、私はこれの有用性を疑っていると言わざるを得ません。統計と同じように、求めているものが正確に求めていたものであることを知っておく必要があります。そうでなければ、結果は役に立ちません。

于 2012-04-17T21:59:50.150 に答える
0

最終的には、エンドユーザーによるデータ分析を可能にすることにはビジネス価値があります。SQLを介した直接アクセスは、そのための1つの方法です。

1つの欠点はまだ言及されていません。SQL Serverのデフォルトでは、リーダーはライターをブロックします。つまり、スナップショットアイソレーションを有効にする必要があります(またはデータベーススナップショットまたはDBの読み取り専用コピーを使用する必要があります)。そうしないと、最も単純で最も無害なユーザークエリでさえ本番システムが機能しなくなる可能性があります。

おそらく驚くべきことに、Microsoftが7年前にスナップショットアイソレーションモードを導入したとしても、システムがオフになっている状態で本番環境に移行するのは一般的であるようです(デフォルトはSIなしでREAD COMMITTEDです)。したがって、ユーザーが本番システムにアクセスできるようにする前に、その変更を行い、再テストとリファクタリングを行う必要がある場合があります。

于 2012-04-18T06:01:09.610 に答える