您可以在PolarDB控制台新增、启用或禁用白名单规则,同时您还可以修改或删除已有的规则。本文将介绍白名单规则的概念以及相关的操作步骤。

白名单规则

设置白名单规则后,任何不包含在白名单中的SQL语句都会被拦截或报警。此模式用于保护您的主业务使用的账号。即只允许此账号执行业务中使用的SQL语句,不允许执行任何业务外的SQL语句。由于实际业务中使用的SQL语句可能会很多,单个SQL语句录入会相当耗时,为了提升工作效率和使用体验。Proxy提供了以下三种白名单模式:
  • 训练模式:Proxy只收集SQL语句,而不进行SQL语句拦截和报警。
  • 检验模式:检测到不包含在白名单中的SQL语句时,只记录不进行SQL拦截。
  • 防护模式:检测到不包含在白名单中的SQL语句时,进行SQL拦截并记录。
您也可以在控制台设置多个白名单,每个白名单可以通过不同的账号去训练。开启检验模式防护模式后,也可以单独为每个白名单指定执行账号。

新增白名单规则

  1. 登录PolarDB控制台
  2. 在控制台左上角,选择集群所在地域。
  3. 找到目标集群,单击集群ID。
  4. 在左侧菜单栏中单击配置与管理 > 安全管理
  5. SQL防火墙页签,单击页面左侧的新增
  6. 新建SQL防火墙规则对话框中,根据您需要新建的白名单模式,设置对应的参数信息。
    表 1. 配置SQL防火墙规则
    参数名称 是否必填 描述
    基本信息 规则名称 SQL防火墙规则的名称。规则名称需满足以下条件:
    • 使用数字和英文字母组成。
    • 字符长度不能超过30个字符。
    规则描述 描述该规则的相关信息,便于后续管理。
    说明 字符长度不能超过64个字符。
    Endpoint 需要应用当前规则的Endpoint。
    规则配置 规则类型 需要新增的规则类型。选择白名单规则
    当前模式 SQL防火墙规则的模式。取值:
    • 训练模式:只收集SQL语句,不进行记录和拦截。
    • 检验模式:检测到白名单外的SQL语句时,只记录不进行拦截。
    • 防护模式:检测到白名单外的SQL语句时,进行记录并拦截。
    数据库账号名 需要应用当前规则的数据库账号名称。支持以下选项:
    • 所有数据库账号:表示当前规则对该集群中的所有数据库账号生效,此时右侧文本框无需填写任何内容。
    • 包含:表示当前规则仅对目标数据库账号生效,此时右侧文本框中必须填入一个或多个数据库账号名,多个账号之间使用英文逗号(,)分隔。
    • 不包含:表示当前规则会对该集群中,除目标数据库账号外的所有数据库账号生效,此时右侧文本框中必须填入一个或多个数据库账号名,多个账号之间使用英文逗号(,)分隔。
    说明 文本框中填入的数据库账号名称需满足如下格式中的任意一种:
    • 账号名。示例:user
    • 账号名@完整IP地址。示例:user@10.0.0.0
  7. 规则设置完成后,单击确认
  8. 根据您选择的模式,选择执行的操作步骤。
    • 如果当前模式训练模式,请执行以下步骤。
      1. 使用上述步骤中的数据库账号名连接指定的数据库Endpoint地址。
      2. 使用该账号执行业务中需要添加到白名单中的SQL语句,Proxy会将SQL语句进行参数化处理,并保存到数据库中的白名单中。例如,
        update t set k = 2 where id = 2;
        参数化后的SQL语句如下:
        update t set k = ? where id = ?
        其中,表示任意值。该参数化后的SQL语句update t set k = ? where id = ?会被收集到白名单中。
      说明 您也可以在任意白名单模式下,在业务SQL语句前添加HINT命令 hint(/* store_to_whitelist */),将业务SQL语句进行参数化处理并添加到白名单中。
    • 如果当前模式检验模式,请执行以下步骤。
      1. 使用上述步骤中的数据库账号名连接指定的数据库Endpoint地址。
      2. 使用该账号执行业务中使用的SQL语句,检测是否还存在没有被收集到白名单中的SQL语句。例如:
        update t set k = 2 where k = 2
        如果该SQL语句不包含在白名单中,Proxy会将该SQL语句放行并记录。且执行结果如下:
        Query OK, 0 rows affected(0.03 sec)
        Rows matched:1 Changed: 0 Warnings:0
    • 如果当前模式防护模式,请执行以下步骤。
      1. 使用上述步骤中的数据库账号名连接指定的数据库Endpoint地址。
      2. 使用该账号执行业务中使用的SQL语句。例如,
        select id from t where id = 1;
        如果该SQL语句没有包含在白名单中,Proxy会进行记录和拦截,且执行结果如下:
        ERROR 1141 (HY000): This SQL is rejected by SQL Firewall. Access denied for user 'xzh'@'x.x.x.x' to database 'xzh': This SQL is not in whitelist wl_test.
说明
  • 每次更新业务时,都需要进行一次SQL语句训练,否则,新业务的SQL语句将不能够被执行。
  • 您可以在控制台新增多个白名单,每个白名单可以通过不同的账号去训练。启用检验模式防护模式后,也可以单独为每个白名单指定要对哪些账号起作用。

启用或禁用白名单规则

  1. 登录PolarDB控制台
  2. 在控制台左上角,选择集群所在地域。
  3. 找到目标集群,单击集群ID。
  4. 在左侧菜单栏中单击配置与管理 > 安全管理
  5. SQL防火墙页签,找到需要启用或禁用的规则,打开启/禁规则开关。
    启/禁规则
    说明 您也可以在规则列表中同时选中多个目标规则,然后单击列表下方的启用禁用按钮,批量启用或禁用规则。
  6. 在弹出的启用禁用对话框中,单击确定
说明 禁用白名单规则时,即使对应的白名单规则被禁用,其对应数据库中的白名单表中的SQL语句还是会被保留。如果对应的白名单再次被启用,同账号的规则还是会生效。如果您想彻底禁用白名单,可通过超级账号连接到对应集群的主节点,删除proxy_auditing.sql_list表中的SQL语句。删除SQL语句后,需要等待5s才会生效。且在进行删除操作时,请勿直接使用DROP命令删除表。

修改白名单规则

  1. 登录PolarDB控制台
  2. 在控制台左上角,选择集群所在地域。
  3. 找到目标集群,单击集群ID。
  4. 在左侧菜单栏中单击配置与管理 > 安全管理
  5. SQL防火墙页签,找到需要修改的规则,单击操作列的修改,在弹出的修改SQL防火墙规则对话框中,根据业务需要修改规则参数。规则参数的具体说明,请参见表 1
    修改SQL防火墙规则
    说明 修改规则时,不支持修改规则名称
  6. 规则修改完成后,单击确认
说明 数据库中被参数化后的SQL语句不支持在控制台修改,只能删除数据库表proxy_auditing.sql_list中的参数化SQL语句后重新添加。

删除白名单规则

  1. 登录PolarDB控制台
  2. 在控制台左上角,选择集群所在地域。
  3. 找到目标集群,单击集群ID。
  4. 在左侧菜单栏中单击配置与管理 > 安全管理
  5. SQL防火墙页签,找到需要删除的规则,单击操作列的删除
    删除SQL防火墙规则
    说明 您也可以在规则列表中同时选中多个目标规则,然后单击列表下方的删除,批量删除规则。
  6. 在弹出的删除对话框中,单击确定
说明 删除白名单规则时,即使对应的白名单规则被删除,其对应数据库中的proxy_auditing.sql_list表中的SQL语句还是会被保留。如果您想彻底删除白名单,可通过超级账号连接到对应集群的主节点,删除proxy_auditing.sql_list表中的SQL语句。删除SQL语句后,需要等待5s才会生效。且在进行删除操作时,请勿直接使用DROP命令删除表。