Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » Mobile Link クライアント管理 » Mobile Link クライアントの概要 » Mobile Link ユーザー

 

認証処理

次に、認証中に発生するイベントの順序を説明します。

  1. リモートアプリケーションは、リモート ID、Mobile Link ユーザー名を使用し、オプションでパスワードと新しいパスワードを使用して、同期要求を開始します。Mobile Link サーバーは新しいトランザクションを開始し、begin_connection_autocommit と begin_connection イベントをトリガーします。

  2. Mobile Link は、リモート ID が現在同期を実行中ではなく、authentication_status が 4000 に設定されていることを確認します。

  3. authenticate_user スクリプトを定義している場合は、次のイベントが発生します。

    1. authenticate_user スクリプトを SQL で作成した場合、このスクリプトは authentication_status が 4000 に事前に設定され、Mobile Link ユーザー名が指定されて、オプションでパスワードと新しいパスワードが使用されます。

      authenticate_user スクリプトを Java または .NET で作成した SQL 文が返された場合、この SQL 文は 事前設定の authentication_status 4000、作成した Mobile Link ユーザー名とオプションでパスワードと新しいパスワードを使用して呼び出されます。

    2. authenticate_user スクリプトで例外が発生したり、スクリプトを実行したときにエラーが発生した場合、同期処理は停止します。

    authenticate_user スクリプトまたは返された SQL 文は、2 ~ 4 つの引数を取るストアドプロシージャーの呼び出しでなければいけません。事前に設定した authentication_status 値が最初のパラメーターとして渡され、このストアドプロシージャーによって更新されます。最初のパラメーターで返された値は、authenticate_user スクリプトからの authentication_status です。

  4. authenticate_user_hashed スクリプトが存在すれば、次のイベントが発生します。

    1. パスワードが指定されている場合、ハッシュされた値が計算されます。新しいパスワードが指定されている場合、ハッシュされた値が計算されます。

    2. authenticate_user_hashed スクリプトが、authentication_status の現在値 (authenticate_user が存在しない場合は事前に設定された authentication_status、または authenticate_user スクリプトから返された authentication_status) とハッシュされたパスワードで呼び出されます。動作は、手順 3 と同じです。最初のパラメーターで返された値は、authenticate_user_hashed スクリプトの authentication_status として使用されます。

  5. Mobile Link サーバーは、authenticate_user スクリプトと authenticate_user_hashed スクリプトが存在する場合は、より大きい値を使用し、どちらのスクリプトも存在しない場合は、事前に設定された authentication_status を使用します。

  6. Mobile Link サーバーは、指定された Mobile Link ユーザー名を ml_user テーブルで問い合わせます。

    1. カスタムスクリプト authenticate_user または authenticate_user_hashed のいずれかが呼び出されますが、指定された Mobile Link ユーザー名が ml_user テーブルになく、authentication_status が有効な場合 (1000 または 2000) は、Mobile Link ユーザー名が Mobile Link システムテーブルの ml_user に追加されます。authentication_status が有効でない場合、ml_user は更新されず、エラーが発生します。

    2. カスタムスクリプトが呼び出されず、指定された Mobile Link ユーザー名も ml_user テーブルにない場合は、Mobile Link サーバーを -zu+ オプションで起動していれば、指定した Mobile Link ユーザー名が ml_user に追加されます。それ以外の場合は、エラーが発生し、authentication_status が無効に設定されます。

    3. カスタムスクリプトが呼び出され、指定された Mobile Link ユーザー名が ml_user テーブルに存在する場合は、何も実行されません。

    4. カスタムスクリプトが「呼び出されず」、指定された Mobile Link ユーザー名が ml_user テーブルに存在する場合、ml_user テーブルにある値に対してパスワードがチェックされます。パスワードが Mobile Link ユーザー ml_user テーブルにある値と一致する場合、authentication_status は有効に設定されます。一致しない場合、authentication_status は無効に設定されます。

  7. authentication_status が有効で、authenticate_user と authenticate_user_hashed のいずれのスクリプトも呼び出されなかった場合に、この Mobile Link ユーザーの ml_user テーブルで新しいパスワードを指定すると、パスワードが指定したものに変更されます。

  8. authenticate_parameters スクリプトを定義しており、authentication_status が有効である場合 (1000 または 2000)、次のイベントが発生します。

    1. パラメーターが authenticate_parameters スクリプトに渡されます。

    2. authenticate_parameters スクリプトが現在の authentication_status より大きい authentication_status 値を返す場合、新しい authentication_status は古い値を上書きします。

  9. authentication_status が有効でない場合、同期はアボートされます。

  10. modify_user スクリプトを定義している場合はそのスクリプトが呼び出され、指定していた Mobile Link ユーザー名が、このスクリプトによって返された新しい Mobile Link ユーザー名に置き換えられます。

  11. Mobile Link サーバーは、authentication_status に関係なく、Mobile Link ユーザー認証後に必ずトランザクションをコミットします。authentication_status が有効な場合 (1000 または 2000)、同期は継続されます。authentication_status が有効でない場合、同期はアボートされます。