1

私は、学生が SQL のスキルをテストするための教育プロジェクトに取り組んでいます。いくつかの問題を作成し、生徒に解決してもらいます。

問題はここにあります:

  1. SQL の質問を作成するにはどうすればよいですか? つまり、学生にいくつかの制約とデータ型を使用してテーブルを作成するように依頼したとします。このテーブルはどこに作成されるのでしょうか? 私の本番データベースでは?そうではないと思います。データベースをエンドユーザー [悪] にさらすと、彼らはそれを損傷しようとします。
  2. 結果セットを検証するにはどうすればよい[Create/Alter/Insert/Update/Rename]ですか?
  3. さまざまなユーザーの回答を分離するにはどうすればよいですか?

SQL Fiddleがこれらのシナリオをどのように処理するかはわかりませんが、要件は SQL Fiddle と同じです。

Validation of Scriptsを見つけましたが、これは SQL Server に固有のものであり、私の質問は 1 つのプラットフォーム (DBMS) に限定されません。

4

1 に答える 1

2

学生がクエリを実行できるが (SQL Fiddle のように) データベースを破壊しないようにする SQL サーバーに自由形式のウィンドウを提供しようとしている場合、最も簡単な方法は、SQL を次のように受け取る Web アプリケーションを構築することです。トランザクション内で入力して実行します。クエリを実行すると、各クエリから結果セットを取得します。それぞれの SQL ステートメントを実行した後、トランザクションをロールバックします。その変更はサーバーにコミットされません。

あなたの学生が信じられないほどいたずら好きで、データベースを破壊するために手段を選ばない (私が SQL Fiddle ユーザーに対して経験したように) と思われる場合は、commit transaction;. これに対する防御は、非常にデータベース固有です。SQL Fiddle のさまざまなデータベースを保護する方法を確認するために、 github で私のコードを調べることをお勧めします (ヒント - 保護するのに最も簡単なサーバーは PostgreSQL です。できればそれを使用してください)。また、明示的なコミットの防止に関する dba.se に関する私の質問を読むのも興味深いかもしれません: JDBC で明示的なコミットを無効にする、SQL で明示的なコミットを検出する、またはデータベースを読み取り専用状態にする

于 2012-12-26T06:05:40.403 に答える