暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

5.6.6.4版本令牌参考

原创 由迪 2020-08-30
816

以下讨论可作为对这些版本令牌组件的参考:

版本令牌功能

版本令牌插件库包括几个用户定义的函数。一组UDF允许操作和检查服务器的版本令牌列表。另一组UDF允许锁定和解锁版本令牌。 调用任何版本令牌UDF都需要该 VERSION_TOKEN_ADMIN特权(或不建议使用的SUPER特权)。

以下UDF允许创建,更改,删除和检查服务器的版本令牌列表。如第5.6.6.3节“使用版本标记”所述,对参数进行解释*name_list和 解释token_list*(包括空白处理) ,该节提供了有关指定标记的语法的详细信息以及其他示例。

  • version_tokens_delete(*name_list*)

    使用*name_list参数从服务器的版本令牌列表中删除令牌,并返回指示操作结果的二进制字符串。name_list*是要删除的版本令牌名称的列表,以分号分隔。

    mysql> SELECT version_tokens_delete('tok1;tok3'); +------------------------------------+ | version_tokens_delete('tok1;tok3') | +------------------------------------+ | 2 version tokens deleted. | +------------------------------------+

    的参数NULL被视为空字符串,这对令牌列表没有影响。

    version_tokens_delete() 删除在其参数中命名的标记(如果存在)。(删除不存在的令牌不是错误。)要完全清除令牌列表而又不知道列表中有哪些令牌,请将NULL或不包含令牌的字符串传递给 version_tokens_set()

    mysql> SELECT version_tokens_set(NULL); +------------------------------+ | version_tokens_set(NULL) | +------------------------------+ | Version tokens list cleared. | +------------------------------+ mysql> SELECT version_tokens_set(''); +------------------------------+ | version_tokens_set('') | +------------------------------+ | Version tokens list cleared. | +------------------------------+
  • version_tokens_edit(*token_list*)

    使用*token_list参数修改服务器的版本令牌列表, 并返回指示操作结果的二进制字符串。token_list*是用分号分隔的 成对列表, 用于指定要定义的每个令牌的名称及其值。如果令牌存在,则将其值更新为给定值。如果令牌不存在,则会使用给定值创建令牌。如果参数是 或不包含令牌的字符串,则令牌列表保持不变。 *name*=*value*``NULL

    mysql> SELECT version_tokens_set('tok1=value1;tok2=value2'); +-----------------------------------------------+ | version_tokens_set('tok1=value1;tok2=value2') | +-----------------------------------------------+ | 2 version tokens set. | +-----------------------------------------------+ mysql> SELECT version_tokens_edit('tok2=new_value2;tok3=new_value3'); +--------------------------------------------------------+ | version_tokens_edit('tok2=new_value2;tok3=new_value3') | +--------------------------------------------------------+ | 2 version tokens updated. | +--------------------------------------------------------+
  • version_tokens_set(*token_list*)

    用*token_list参数中定义的标记替换服务器的版本标记列表, 并返回指示操作结果的二进制字符串。token_list*是用分号分隔的 成对列表, 用于指定要定义的每个令牌的名称及其值。如果参数是或不包含令牌的字符串,则清除令牌列表。 *name*=*value*``NULL

    mysql> SELECT version_tokens_set('tok1=value1;tok2=value2'); +-----------------------------------------------+ | version_tokens_set('tok1=value1;tok2=value2') | +-----------------------------------------------+ | 2 version tokens set. | +-----------------------------------------------+
  • version_tokens_show()

    以二进制字符串形式返回服务器的版本令牌列表,该二进制字符串包含用分号分隔的 对列表 。 *name*=*value*

    mysql> SELECT version_tokens_show(); +--------------------------+ | version_tokens_show() | +--------------------------+ | tok2=value2;tok1=value1; | +--------------------------+

以下UDF允许版本令牌被锁定和解锁:

  • version_tokens_lock_exclusive(*token_name*[, *token_name*\] ..., *timeout*)

    获取一个或多个版本令牌的排他锁,这些令牌由名称指定为字符串,如果未在给定的超时值内获取锁,则会超时并显示错误。

    mysql> SELECT version_tokens_lock_exclusive('lock1', 'lock2', 10); +-----------------------------------------------------+ | version_tokens_lock_exclusive('lock1', 'lock2', 10) | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+
  • version_tokens_lock_shared(*token_name*[, *token_name*\] ..., *timeout*)

    获取一个或多个版本令牌的共享锁,这些共享令牌由名称指定为字符串,如果未在给定的超时值内获取锁,则会超时并显示错误。

    mysql> SELECT version_tokens_lock_shared('lock1', 'lock2', 10); +--------------------------------------------------+ | version_tokens_lock_shared('lock1', 'lock2', 10) | +--------------------------------------------------+ | 1 | +--------------------------------------------------+
  • version_tokens_unlock()

    使用version_tokens_lock_exclusive() 和 释放当前会话中获得的所有锁 version_tokens_lock_shared()

    mysql> SELECT version_tokens_unlock(); +-------------------------+ | version_tokens_unlock() | +-------------------------+ | 1 | +-------------------------+

锁定功能具有以下特征:

  • 成功的返回值非零。否则,将发生错误。
  • 令牌名称是字符串。
  • 与操纵服务器令牌列表的UDF的参数处理相反,令牌名称参数周围的空格不会被忽略, =并且;允许使用字符。
  • 可以锁定不存在的令牌名称。这不会创建令牌。
  • 超时值是非负整数,表示错误超时之前等待获取锁的时间(以秒为单位)。如果超时为0,则没有等待,如果无法立即获取锁,该函数将产生错误。
  • 版本令牌锁定功能基于第5.6.8.1节“锁定服务”中描述的锁定服务
版本令牌系统变量

版本令牌支持以下系统变量。除非安装了Version Tokens插件,否则这些变量不可用(请参见第5.6.6.2节“安装或卸载Version Token”)。

系统变量:

  • version_tokens_session

    命令行格式 --version-tokens-session=value
    系统变量 version_tokens_session
    范围 全局
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 NULL

    此变量的会话值指定客户端版本令牌列表,并指示客户端会话要求服务器版本令牌列表具有的令牌。

    如果 version_tokens_session 变量是NULL(默认值)或具有空值,则任何服务器版本令牌列表都匹配。(实际上,空值将禁用匹配要求。)

    如果 version_tokens_session 变量具有非空值,则其值与服务器版本令牌列表之间的任何不匹配都会导致会话发送到服务器的任何语句出错。在以下情况下会发生不匹配:

    服务器版本令牌列表包括未在version_tokens_session 值中命名的令牌,这并非不匹配 。

    假设管理应用程序已按如下所示设置服务器令牌列表:

    mysql> SELECT version_tokens_set('tok1=a;tok2=b;tok3=c'); +--------------------------------------------+ | version_tokens_set('tok1=a;tok2=b;tok3=c') | +--------------------------------------------+ | 3 version tokens set. | +--------------------------------------------+

    客户端通过设置其version_tokens_session 值来注册它要求服务器匹配的令牌 。然后,对于客户端发送的每个后续语句,服务器将根据客户端version_tokens_session 值检查其令牌列表, 如果不匹配,则会产生错误:

    mysql> SET @@SESSION.version_tokens_session = 'tok1=a;tok2=b'; mysql> SELECT 1; +---+ | 1 | +---+ | 1 | +---+ mysql> SET @@SESSION.version_tokens_session = 'tok1=b'; mysql> SELECT 1; ERROR 3136 (42000): Version token mismatch for tok1. Correct value a

    第一个SELECT成功,因为客户端令牌tok1tok2存在于服务器令牌列表中,并且每个令牌在服务器列表中具有相同的值。第二个SELECT失败,因为尽管tok1它存在于服务器令牌列表中,但其值与客户端指定的值不同。

    此时,除非服务器令牌列表更改为再次匹配,否则客户端发送的任何语句都会失败。假设管理应用程序更改服务器令牌列表,如下所示:

    mysql> SELECT version_tokens_edit('tok1=b'); +-------------------------------+ | version_tokens_edit('tok1=b') | +-------------------------------+ | 1 version tokens updated. | +-------------------------------+ mysql> SELECT version_tokens_show(); +-----------------------+ | version_tokens_show() | +-----------------------+ | tok3=c;tok1=b;tok2=b; | +-----------------------+

    现在,客户端 version_tokens_session 值与服务器令牌列表匹配,并且客户端可以再次成功执行语句:

    mysql> SELECT 1; +---+ | 1 | +---+ | 1 | +---+
  • version_tokens_session_number

    命令行格式 --version-tokens-session-number=#
    系统变量 version_tokens_session_number
    范围 全球会议
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0

    此变量仅供内部使用。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论