2012-04-17 11 views
3

遠く離れた離れた銀河の中で、私は数人の開発者の間での議論の証人でした。このテーマは、エンドユーザーが運用SQLサーバー(MS SQL 2008)にアクセスして、自分のデータに対して独自のレポートを作成できるようにすることをお勧めします。エンドユーザへのSQL:賛否両論

ビジネスマンからのリクエストでした。「お客様はカスタムレポートを作成したいと思っています。彼は 権限のセットを介してユーザーに「読み取り専用アクセス」を与えると、システムが絶対に安全作ることができた

  1. :これを提案し

    男は、と主張しました。

  2. 最初にSQL は「エンドユーザー」言語であり、現在の状態です。
  3. のSQLクエリを実行する権限を持つユーザーは、 の開発者とサポートに迷惑をかけないようにすることができます。この反対していた

他の人が主張:

  1. それはMS SQLでも最大持つクラッシュする非常に簡単です。制限付きアクセス。
  2. SQLとデータベース構造をエンドユーザーに公開するのは良い考えではありません。それは悪いデザインです。
  3. SQLはプログラマー以外の人にとって複雑すぎるため、人生が楽になるわけではありません。

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

ありがとうございます!

+1

「SQLとデータベース構造をエンドユーザーに公開する」が「悪い設計」であるのはなぜですか? DB設計が良好であれば、それを隠す理由はありません。 –

+0

私の謙虚な意見では、DBは内部システムの機能です。エンドユーザーは通常、システムの仕組みを知らず、知ってはいけません。それはブラックボックスです。 DBをエンドユーザーに公開すると、内部設計の重要な部分が明らかになりません。私見では。 –

答えて

5

ユーザーを読み取り専用アクセスに制限するだけでなく、query governor cost limitをオンにすることで、いくつかのことをより安全にすることができます。クエリを実行する前にクエリを分析しようとしますが、クエリがあらかじめ定義されたしきい値を超えているとクエリの実行を拒否します。

これよりも優れているのは、クエリ用にクローンデータベースを使用できることです。これは、本番システムのバックアップを実行している別個のサーバーのような単純なものかもしれません。あなたのデータがどのように「生きる」かに応じて、それに応じてバックアップ/復元間隔を調整することができます。

データベースを公開してプログラマーではないユーザーに直接問い合わせを行うことは、ユーザーがどれほど精通しているかによっても変わりません。彼らはSQLを教えられますか?簡単なことではそれほど難しいことではありません。

1

に対しての議論は、非常に弱いです。ユーザーがSQLを書くことができない場合は、どうして気にしますか?レポート作成ツール(Crystal Reports)があり、多くのことができるようになっています。

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

データベースアクセスをロックすることで、企業市場に参入することは決してありません。

EDIT:大半のユーザーのニーズに合わせて、一連のビューをデータベースに組み込むことができます。この方法では、複雑な結合について心配する必要はありません。

2

これは、ユーザーによって異なります。ユーザーが技術的に能力があるか、このスキルセットの開発に興味がある場合、プログラマーからの作業負荷の大きな部分を軽減できます。

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

可能であれば、報告用に別のデータベースミラーを作成してください。彼らはかなり最新のデータを持っているので夜間に更新してください。もちろん、リアルタイムのレポート作成が必要な場合には、これは理想的ではありません。

1

読み取り専用アクセスでも、本番データベースに対して独自のクエリを作成するためのエンドユーザーのアクセスの主な問題は、パフォーマンスがフロアを通過して地下に降下することです。エンドユーザがSQLを書くことができるのであれば、通常は非常にうまく書けません。ある時点で、カーソルは(MS SQLの場合)カーソルを発見し、そして/または彼らはそれらの結合を過信に思うでしょう。彼らは見つけることができるすべてのテーブルを引き出します。それらを幸せにしたい場合は、夜間に、別のマシン(または十分に制限されたVM)上の非本番データベースにダンプし、自分自身をノックアウトするように指示します。プロのヒント:あなたはそれをサポートする時間がないことを彼らに伝えます。

私は反エンドユーザーではありません。私は、効率的なやり方に似た何かでクエリを書くことが信頼できるとは思いません。あなたが信じることができると思う少数の選択された人がいる場合、それらを試してみて、パスワードを共有していればロックアウトしてください。

1

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

すべてを処理しなければならない状況で、稼働時間の責任を負う場合は、読み取り専用でもそれを行うことはお勧めしません。

1

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

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

しかし、私はこれの有用性を疑うと言わなければなりません。いつものように、あなたが求めるものはまさにあなたが求めていたものであることを知る必要があります。さもなければ結果は無駄です。

0

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

1つの欠点はまだ言及されていません。 SQL Serverの既定では、読者はライターをブロックします。つまり、おそらくスナップショットの分離を有効にする必要があります(またはデータベースのスナップショットや読み取り専用コピーを使用する必要があります)。そうしないと、最も単純で無邪気なユーザークエリでも運用システムが壊れる可能性があります。

驚くべきことに、マイクロソフトは7年前にスナップショット分離モードを導入しましたが、システムをオフにしてシステムを稼動させるのが一般的です(デフォルトはSIなしでREAD COMMITTED)。したがって、ユーザーが本番システムにアクセスする前に、その変更を行い、再テストとリファクタリングを行う必要があります。

関連する問題