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

SQL Anywhere 12.0.0 (中文) » MobiLink - 客户端管理 » MobiLink 客户端简介 » MobiLink 用户

 

验证过程

以下是对验证过程中所发生事件的顺序的说明。

  1. 远程应用程序使用远程 ID、MobiLink 用户名以及口令和新口令(可选)来启动同步请求。MobiLink 服务器会启动一个新事务并触发 begin_connection_autocommit 事件和 begin_connection 事件。

  2. MobiLink 会验证远程 ID 当前是否未在进行同步并将 authentication_status 预设为 4000。

  3. 如果定义了 authenticate_user 脚本,则将发生以下情况:

    1. 如果用 SQL 编写 authenticate_user 脚本,则将以 authentication_status 预设值 4000、所提供的 MobiLink 用户名以及可选的口令和新口令来调用此脚本。

      如果用 Java 或 .NET 编写 authenticate_user 脚本并返回 SQL 语句,则将以 authentication_status 预设值 4000、所提供的 MobiLink 用户名以及可选的口令和新口令来调用此 SQL 语句。

    2. 如果 authenticate_user 脚本在执行过程中抛出异常或出现错误,同步进程将停止。

    authenticate_user 脚本或返回的 SQL 语句必须是对带有两到四个参数的存储过程的调用。authentication_status 预设值会作为第一个参数传递且可以由存储过程进行更新。第一个参数返回的值是 authenticate_user 脚本中的 authentication_status。

  4. 如果存在 authenticate_user_hashed 脚本,将发生以下情况:

    1. 如果提供了口令,将为该口令计算散列值。如果提供了新口令,也将为其计算散列值。

    2. 将以 authentication_status 的当前值(如果 authenticate_user 脚本不存在则为预设 authentication_status,否则为 authenticate_user 脚本中返回的 authentication_status)和散列口令来调用 authenticate_user_hashed 脚本。此行为与第 3 步相同。第一个参数的返回值用作 authenticate_user_hashed 脚本的 authentication_status。

  5. MobiLink 服务器会采用 authenticate_user 脚本和 authenticate_user_hashed 脚本(如果这两个脚本存在)所返回 auth_user 状态中的较大值,如果这两个脚本均不存在,则采用预设 authentication_status。

  6. MobiLink 服务器在 ml_user 表中查询您提供的 MobiLink 用户名。

    1. 如果调用了自定义脚本 authenticate_user 或 authenticate_user_hashed,但您提供的 MobiLink 用户名未在 ml_user 表中而且 authentication_status 有效(1000 或 2000),则 MobiLink 用户名会被添加到 MobiLink 系统表 ml_user 中。如果 authentication_status 无效,将不会更新 ml_user,并且会发生错误。

    2. 如果未调用自定义脚本而且您提供的 MobiLink 用户名也不在 ml_user 表中,那么假如您用 -zu+ 选项启动 MobiLink 服务器,您所提供的 MobiLink 用户名会被添加到 ml_user 中。否则,将发生错误,authentication_status 会设置为无效。

    3. 如果调用了自定义脚本且您提供的 MobiLink 用户名在 ml_user 表中,则不会发生任何情况。

    4. 如果调用自定义脚本,而您所提供的 MobiLink 用户名在 ml_user 表中,则将根据 ml_user 表中的值来检查口令。如果口令与 ml_user 表中该 MobiLink 用户的口令相匹配,authentication_status 会设置为有效。否则 authentication_status 会设置为无效。

  7. 如果该 authentication_status 有效而且没有调用 authenticate_user 和 authenticate_user_hashed 脚本中的任何一个,那么假如您在 ml_user 表中为此 MobiLink 用户提供了新口令,则口令会被更改为您所提供的那个口令。

  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 脚本,则将调用它,以用此脚本返回的新 MobiLink 用户名来替换您提供的 MobiLink 用户名。

  11. 无论 authentication_status 如何,MobiLink 服务器总是会在 MobiLink 用户验证后提交事务。如果 authentication_status 有效(1000 或 2000),则同步继续。如果 authentication_status 无效,将中止同步。