次に、認証中に発生するイベントの順序を説明します。
リモート・アプリケーションは、リモート ID、Mobile Link ユーザ名を使用し、オプションでパスワードと新しいパスワードを使用して、同期要求を開始します。Mobile Link サーバは新しいトランザクションを開始し、begin_connection_autocommit と begin_connection イベントをトリガします。
Mobile Link は、リモート ID が現在同期を実行中ではなく、authentication_status が 4000 に設定されていることを確認します。
authenticate_user スクリプトを定義している場合は、次のイベントが発生します。
authenticate_user スクリプトを SQL で作成した場合、このスクリプトは authentication_status が 4000 に事前に設定され、Mobile Link ユーザ名が指定されて、オプションでパスワードと新しいパスワードが使用されます。
authenticate_user スクリプトを Java または .NET で作成した場合、SQL 文が返されてから、この SQL 文は authentication_status が 4000 に事前に設定され、Mobile Link ユーザ名が指定されて、オプションでパスワードと新しいパスワードが使用されます。
authenticate_user スクリプトで例外が発生したり、スクリプトを実行したときにエラーが発生した場合、同期処理は停止します。
authenticate_user スクリプトまたは返された SQL 文は、2 ~ 4 つの引数を取るストアド・プロシージャの呼び出しでなければいけません。事前に設定した authentication_status 値が最初のパラメータとして渡され、このストアド・プロシージャによって更新されます。最初のパラメータで返された値は、authenticate_user スクリプトからの authentication_status です。
authenticate_user_hashed スクリプトが存在すれば、次のイベントが発生します。
パスワードが指定されている場合、ハッシュされた値が計算されます。新しいパスワードが指定されている場合、ハッシュされた値が計算されます。
authenticate_user_hashed スクリプトが、authentication_status の現在値 (authenticate_user が存在しない場合は事前に設定された authentication_status、または authenticate_user スクリプトから返された authentication_status) とハッシュされたパスワードで呼び出されます。動作は、手順 3 と同じです。最初のパラメータで返された値は、authenticate_user_hashed スクリプトの authentication_status として使用されます。
Mobile Link サーバは、authenticate_user スクリプトと authenticate_user_hashed スクリプトが存在する場合は、より大きい値を使用し、どちらのスクリプトも存在しない場合は、事前に設定された authentication_status を使用します。
Mobile Link サーバは、指定された Mobile Link ユーザ名を ml_user テーブルで問い合わせます。
カスタム・スクリプト authenticate_user または authenticate_user_hashed のいずれかが呼び出されますが、指定された Mobile Link ユーザ名が ml_user テーブルになく、authentication_status が有効な場合 (1000 または 2000) は、Mobile Link ユーザ名が Mobile Link システム・テーブルの ml_user に追加されます。authentication_status が有効でない場合、ml_user は更新されず、エラーが発生します。
カスタム・スクリプトが呼び出されず、指定された Mobile Link ユーザ名も ml_user テーブルにない場合は、Mobile Link サーバを -zu+ オプションで起動していれば、指定した Mobile Link ユーザ名が ml_user に追加されます。それ以外の場合は、エラーが発生し、authentication_status が無効に設定されます。
カスタム・スクリプトが呼び出され、指定された Mobile Link ユーザ名が ml_user テーブルに存在する場合は、何も実行されません。
カスタム・スクリプトが「呼び出されず」、指定された Mobile Link ユーザ名が ml_user テーブルに存在する場合、ml_user テーブルにある値に対してパスワードがチェックされます。パスワードがMobile Link ユーザ ml_user テーブルにある値と一致する場合、authentication_status は有効に設定されます。一致しない場合、authentication_status は無効に設定されます。
authentication_status が有効で、authenticate_user と authenticate_user_hashed のいずれのスクリプトも呼び出されなかった場合に、この Mobile Link ユーザの ml_user テーブルで新しいパスワードを指定すると、パスワードが指定したものに変更されます。
authenticate_parameters スクリプトを定義しており、authentication_status が有効である場合 (1000 または 2000)、次のイベントが発生します。
パラメータが authenticate_parameters スクリプトに渡されます。
authenticate_parameters スクリプトが現在の authentication_status より大きい authentication_status 値を返す場合、新しい authentication_status は古い値を上書きします。
authentication_status が有効でない場合、同期はアボートされます。
modify_user スクリプトを定義している場合はそのスクリプトが呼び出され、指定していた Mobile Link ユーザ名が、このスクリプトによって返された新しい Mobile Link ユーザ名に置き換えられます。
Mobile Link サーバは、authentication_status に関係なく、Mobile Link ユーザ認証後に必ずトランザクションをコミットします。authentication_status が有効な場合 (1000 または 2000)、同期は継続されます。authentication_status が有効でない場合、同期はアボートされます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |