アドホッククエリとは


167

SQLに関する本を読んでいます。その本にはAd Hoc Queryという用語がありますが、私にはわかりません。

アドホッククエリとは具体的に何ですか。

回答:


225

アドホックは「この目的のために」ラテン語です。これを「オンザフライ」クエリまたは「ジャストソー」クエリと呼ぶかもしれません。これは、必要な場所で緩く入力するだけのSQLクエリです。

var newSqlQuery = "SELECT * FROM table WHERE id = " + myId;

...これは、の値に応じて、コード行が実行されるたびにまったく異なるクエリですmyId。アドホッククエリの反対は、ストアドプロシージャなどの事前定義されたクエリで、そのテーブルから選択するという一般的な目的全体のために単一のクエリを作成し(たとえば)、IDを変数として渡します。


17
@David Hedlundクエリは次の脆弱性がありSQL injection attacksます...パラメータを使用する必要があります。
Parid0kht 2013年

45
@パリドハト:確かに。私はその使用を主張しているのではなく、問題だったアドホッククエリの概念を説明しています。
David Hedlund 2013年

12
@DavidHedlund:はい、わかりました..しかし、これを読んでこの攻撃について何の考えもないユーザーがいるため、回答でそれを言及する方が良いかもしれません。
Parid0kht 2013年

46
ユーザーがそれを読んでSQLインジェクションについて理解していない場合、ハッカーの興味の対象となる可能性のある作業は行われていません。極端に行きません...
Michal B. 14年

7
長年の経験を持つ開発者として、私が探しているものとはまったく異なるものを探している間、私は多くのことを学びました。したがって、IMHOが...ここでmyIdに必要な制御とサニタイズを行うことを忘れないでください」のような文を追加しても、害はありません。
scaryguy 2015

24

アドホッククエリは、クエリが発行される前に決定できないクエリです。これは、必要に応じて情報を取得するために作成され、通常はデスクトップに常駐するクエリツールによって構築される動的に構築されたSQLで構成されます。

チェック:http : //www.learn.geekinterview.com/data-warehouse/dw-basics/what-is-an-ad-hoc-query.html


それで、静的クエリを入力して1回実行すると、「アドホック」ではありませんか?
jumxozizi 2017年

1

また、アドホッククエリがSQLインジェクション攻撃に対して脆弱であることを追加します。それを使用しないようにし、代わりにパラメーター化されたSQLを使用する必要があります(JavaのPreparedStatementなど)。


7
アドホッククエリはSQLインジェクションに対して脆弱ではありません。ユーザー入力を受け入れるパラメーター化されていないクエリは、SQLインジェクションに対して脆弱です。
ベン

@Benアドホッククエリは常にパラメーター化されていません。変数をユーザーに公開しない場合、SQLインジェクション攻撃を受けることはできません。ただし、アドホッククエリはSQLインジェクションにとって危険です。
xli 2013

1

アドホッククエリは、クエリが発行される前に決定できないクエリです。これは、必要に応じて情報を取得するために作成され、通常はデスクトップに常駐するクエリツールによって構築される動的に構築されたSQLで構成されます。アドホッククエリは、コンピューターやデータベースマネージャーにはありませんが、データユーザーのニーズに応じて動的に作成されます。

SQLでは、アドホッククエリは緩やかに型指定されたコマンド/クエリであり、その値はいくつかの変数に依存します。コマンドを実行するたびに、変数の値によって結果が異なります。事前に決定することはできず、通常は動的プログラミングSQLクエリの対象になります。アドホッククエリは有効期間が短く、実行時に作成されます。


1

アドホッククエリは、いずれか、または複数のDBサーバ上で利用可能なテーブルをマージから特定のレコードを提供するために、作成したものです。これらのクエリは通常、使い捨ての目的で使用され、将来再び実行するためにストアドプロシージャに組み込む必要がない場合があります。

アドホックシナリオ:固有の変数セットを持つ特定のデータサブセットのリクエストを受け取ります。必要な結果を提供できる事前に作成されたクエリがない場合は、アドホッククエリを作成してレコードセットの結果を生成する必要があります。

使い捨てのアドホッククエリ以外に、ストアドプロシージャがあります。つまり、DBインターフェースツール内に保存されているクエリ。次に、これらのストアドプロシージャをモジュールまたはマクロ内で順番に実行して、オンデマンドで、スケジュールに従って、または別のイベントによってトリガーされて、事前定義されたタスクを実行できます。

ストアドプロシージャのシナリオ:毎月、同じテーブルのセットから同じ変数を使用してレポートを生成する必要があります(これらの変数は、特定の事前定義値、「今月の終わり」などの計算値、またはユーザーの入力値です)。プロシージャを初めてアドホッククエリとして作成します。結果をテストして正確性を確認した後、このクエリの展開を選択できます。次に、クエリまたは一連のクエリをモジュールまたはマクロに保存して、必要に応じて再度実行します。


0

アドホッククエリは、まだ定義されていないものであり、定期的に必要とされないものであるため、通常のレポートまたはクエリのセットには含まれません。


何を書いているのか説明できますか?「典型的なセット」とは何ですか。コンパイルされたコードを意味しますか?
ベン・

0

アドホックステートメントは、Where句があり、実際にはWhere句が次のようなリテラルを持つことができるT-SQLステートメントです。

Select * from member where member_no=285;

または変数:

declare @mno INT=285;
Select * from member where member_no=@mno

-4

アドホッククエリは次のとおりです。

  1. 事前に計画された質問。
  2. 予定された質問。
  3. 瞬間の質問の拍車。
  4. 結果を返さない質問。

これはSQLの意味で何を意味しますか?また、「結果が返されない質問」もすべてではありません。アドホックです。
jumxozizi 2017年


-6

SQL Serverでは、「アドホッククエリ」はアドホック分散クエリにも使用されます。これらは、OpenRowsetまたはOpenDatasourceを介した他のサーバー上のアドホッククエリです。アドホック分散クエリは、構成後にのみ許可されます。これはサーバー構成オプションです。


これはSQL Serverに関するものではありません。問題は、特定の企業家向けソリューションではなく、アドホッククエリの意味の一般的な理解に関するものでした
アーサー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.