本补充材料的目的是提供SQL和数据集的概述。SQL是在FortiAnalyzer 培训范围之外的, 本课程的目标是提供 信息,实现改变或创建数据集,为报告提取数据。

 这些是我们将在课程中学习的标题,先从数据集和SQL开始。。

 本章节为数据集。数据集定义从数据库中提取哪些数据,并在报告图表中呈现。

  FortiAnalyzer提供预定义数据集处理最常见的查询, 您需要了解Structured Query,即SQL,以改变或创建数 据集

 数据集是SQL SELECT查询。查询的结果—从数据库中查询的指定数据— 在图表中呈现FortiAnalyzer包含很多预定义数据庥,其中包含一些最常见的数据库查询。可以 Datasets 页面中查看此示例为默认的 Top-Destinations-By-Sessions 数据集。

 当构建查询时,必须使用SQL语句作为数据库的接口。当创建和编辑数据集时,有一个 Test 按键可以测试查 询。如果格式不正确,会出现错误信息。如果格式正确,并且查询的数据在数据库中可用,会出现结果。

  注意SQL查询不区分大小写。

 接下来仔细查看查询命令。为了了解这个数据集示例,更明确的了解查询的内容,你需要了解SQL。SQL是声 明式语言—描述需要做什么而不是如何去做

  在SQL数据库中,所有的停止以表的形式呈现,每个表格由一组行和列组成。有两种类型的表:

  • 用户表格,包含在数据库中的信息
  • 系统表格,包含数据库描述

 为了检索和操作数据库中的数据,你需要使用数据操作语言(data manipulation language),一种SQL使用的语 法元素。这些语法元素为:SELECT, INSERT, UPDATE, 和DELETE。这些元素被用做查询的第一个单词—声 明式动词描述需要做什么。

  而与FortiAnalyzer报表相关的,只有SELECT声明被使用,只是只读查询声明,用做从数据库中检索数据。

 SELECT声明用做查询数据库,检索日志数据。为了查询需要的数据,你必须指定条件,例如,需要查询在IT 部门工作的员工列表。为了把这些条件变为SQL可以明白的语言,你必须使用SELECT声明公认的子句。

  FortiAnalyzer报告使用的主要子句:

  • FROM, 指定表格.
  • WHERE,设置条件,所有不满足条件的行将被从输出中排除
  • GROUP BY,从多个记录和组收集数据,通过一个或多个列显示结果.
  • ORDER BY,依据行对结果排序,如果没有给出ORDER BY,返回的行将为系统可以最快生成的任意顺序,  直到结尾。
  • LIMIT,基于指定值限制返回结果的数量, OFFSET是与LIMIT一起使用的另一个子句,依据指定的数据偏移  结果。例如,如果你设置限制值为3个记录,偏离值为1,返回的第一个记录将被跳过,替换为返回第二个、  第三个和第四个记录(一个3个)。

  FROM是组成SELECT声明唯一一个强制需要的子句,其它子句为可选,用于过滤或限制,集合或结合,以及 控制排序。需要特别注意,子句必须以特定顺序编码。也就是说,跟随SELECT的关键字,一个或多个子句要 以表格中提供的顺序进行排列。例如,不能在FROM子句之前使用 WHERE 子句。所有可选子句不是必须使用, 但你使用的任意一个子句必须顺序正确。

 SELECT是进行包含在FortiAnalyzer报告中的任意查询时,使用的第一个单词。这个陈述声明命令程序查询数 据库中的列,返回需要的信息。例如:

  SELECT dstip

  Dstip是SQL结构中目标IP列的名称。注意可以选择多个列名称,也可以通过附加命令 “as <friendly_name_of_column>”,在结果表格中,把一个列的名称显示为更易理解的名称。例如 SELECT dstip 为 destination_ip。在结果表格中,dstip值的列名称被显示为 destination_ip.

  如果需要返回所有数据,可以使用 *符号。例如SELECT *。尽管多数时候这将返回多于需要的信息。

  与SELECT声明必须一起使用FROM 子句,是为了告诉程序信息位于何处。

  例如:

  FROM $log

  这里的 $log 是指对数据集在选择的日志类型中引用的日志。如流量日志或web过滤日志等等。

 你可以搜索多个日志类型整合数据,方便对信息进行比较对照。为实现这个需求,可以关联指定的日志类型使 用日志类型符。例如,如果你搜索流量日志和web过滤日志,使用:

  FROM $log-traffic, $log-webfilter

 在所有可选子句中,WHERE 声明是查询的核心,因为该子句是指定查询条件。

  WHERE声明必须始终在FROM声明之后

  在这个例子中,第一个表达式是$filter,用做把结果限制在选择的时间周期内。如果在查询里没有添加时间 周期,则在通过FortiAnalyzer GUI创建数据集时,通过下拉框来指定。

  第二个表达式是dstip,即目的IP,第三个表达式为空。

  SQL也可以支持逻辑运算符, 使用AND/OR/NOT声明构建查询。运算符将在后续的课程中讨论。

 GROUP BY子句用做对每一个组创建一个输出行。GROUP BY 语句通常在SELECT声明中与Aggregate函数结 合使用。后续我们将涉及Aggregate函数。本质上来说,是在一组值上运行计算,返回一个单独的值。如果不 与Aggregate函数结合使用,则与DISTINCT 子句类似,从一组SELECT声明结果移除重复条目。

  在这个例子中,GROUP BY 子句与Aggregate函数结合使用。Aggregate函数是count(*),是在表中选择所 有的行,即使一些列包含空值。

  在这个例子中,我们通过dstip (目的IP)分组。

 ORDER BY可以通过列名称或列数字对查询排序。默认情况下,SQL查询结果表的行没有以特定顺序排序,所 以可以使用 ORDER BY 子句以升序(asc)或降序(desc)对列值排序。如果使用子句时没有指定升序或降序,默认为升序。

  可以对多个列排序,对每个列指定不同的分类排序。例如,可以一个列升级而另一个列为降序。

  在这个例子中,我们对会话进行降序排序。

 默认情况下,满足在查询中指定条件的所有结果将会返回。然而,如果你只希望检索记录的子集,可以在返回 的记录上设置限制。使用LIMIT 子句产指定需要的结果数量。例如,LIMIT 7。这是个重要的方法确保查询不 用占用不必要的CPU或内存资源。特别是如果在大规模部署时,很多设备在FortiAnalyzer上记录日志的情况下。 也可以把LIMIT和ORDER BY asc结合使用,得到 “top <x> 结果” (或 desc 得到 “bottom <x> 结果”).

  可以结合LIMIT子句使用OFFSET子句,通过设置的值偏移结果。例如,设置限制7个记录,偏移量为1,返回 的第一个记录将被跳过,替换为返回2到8

 我们已经对主要的SQL子句进行了介绍和解释,接下来可以使用这些方式构建完整的数据集查询。为了形象的 查看把这些子句结合在一起使用的效果, 可以在GUI中使用数据集Test 按键。此功能用于测试或修改查询,实 现得到需要的指定输出。

  确保选择的查询日志类型。查询使用通用的 $log,是参考在Log Type 下拉区域中指定的日志类型(此例中为 traffic)。可以在查询中输入指定的日志类型 (例如,$log-traffic),从 Log Type 下拉区域减少风险,也更 方便查询。

  在右侧的对话框里,必须指定设备或在哪个设备上使用查询。这里可以指定 All Devices.

  必须指定查询的时间周期。正如以前提到的, $filter表达式结合WHERE子句使用,声明需要的指定时间周 期的限制结果。Time Period 下拉框可以指定时间周期。

  如果查询出现错误,在窗口下会出现错误信息。如果查询正确,在窗口下出现查询结果。如果结果在窗口下出 现,说明数据集已正确构建。

 现在使用可视化结果调整已写好的查询,更充分的了解FortiAnalyzer是如何解释查询语句。

  SELECT dstip as destination_ip, count(*) as session: 选择目标IP地址并以“destination_ip”命 名列。选择 count (all data) 并以“session”命名列。

  FROM $log: 查询流量日志数据,在 Log Type 下拉列表中指定。

  WHERE $filter and dstip is not null: 限制指定时间周期的结果, 在Time Period下拉列表中选择 Today,仅提供不为空人目的IP地址 。注意 “null” 代表未知数据—不代表0

  GROUP BY dstip: 通过目的IP分组结果。指定需要的dstip放在名为“destination_ip”的列中。

  ORDER BY session desc: 依据session以降序对结果排序。注意结果从高 (200) 到低(4)

  LIMIT 7: 只提供前7个结果。

  OFFSET 1: 跳过第一个结果,限制为下7个结果 (i.e. 2 到 8).

 现在已了解了数据集和SQL.

  接着学习SQL函数和运算符。

 本章节为FortiAnalyzer 数据集一些最常的函数和运算符—不是完整的详尽列表。

 SQL有两种函数类型: “normal” 函数和 aggregate函数.

  Aggregate函数使用数据完整的列作为输入,产生一个单独的输出,“normal”在数据列中的每个元素上运行。

 在FortiAnalyzer数据集中使用的一个常见的函数是NULLIF。NULLIF函数有两个参数,如果两个参数相等,则 返回NULL,否则,返回第一个 参数。NULL 代表未知数据—不等于0。

 另一个在FortiAnalyzer数据集中使用的一个常见的函数是COALSECE。COALESCE在参数中返回第一个不是 NULL的参数,只有所有参数均为NULL时,才会返回NULL。通常用做当检索数据显示时,把null值替换为一个 默认值。

  COALESCE 与 SELECT 声明结合使用,取一个或多个表达式作为一个参数。值可以不是字符串数据类型—可 以是任意数据类型 (而且是不同数据类型)。语法是:

  COALESCE (expression 1, expression 2, …)

 Aggregate函数是不同规则的特殊分类,函数在整个列上进行运算,把数据替换为离散值。这些函数在一个列 中的一组值上执行计算,并返回一个单独的值。尽管aggregate 函数与GROUP BY子句结合使用,这些函数也 可以在SELECT声明中单独使用。

  这个表格包含了在SQL中使用的aggregate函数列表。除了count之外,所有函数可以取一个表达式作为一个参 数,并可以忽略 null 值。Count 可以使用星号作为一个参数。星号在这种情况下表示返回所有行,即使一些行 包含 NULL 值。

  表达式结合aggregate函数是 SELECT count(unauthuser),这将返回非认证用户数。

 接下来是SQL 运算符。运算符是保留的单词或字符,主要用于SQL声明的WHERE子句,执行各种运算。

  有三种运算符类型:

  • 算术运算符
  • 比较运算符
  • 逻辑运算符

 这是一些算术运算符的示例。算术运算符在两个表达式上,对数字数据类型的一个或多个数据类型执行数学运 算。

 这是一些比较运算符示例。比较运算符测试两个表达式是否相同,可以用于除了text, ntext, 或 image 数据类 型表达式之外的所有表达式。

 这是一些逻辑运算符示例。逻辑运算符测试一些条件的真实性,与比较运算符相似,返回布尔数据类型, TRUE, FALSE, 或UNKNOWN值。

 现在已了解了SQL 函数和运算符

  接着学习FortiAnalyzer函数和宏命令

 本章节介绍 FortiAnalyzer函数和宏命令

  FortiAnalyzer包含一些基于已知SQL函数的内置函数,但脚本不同。

  FortiAnalyzer也包含宏命令, 可以把冗长的或复杂的SQL声明变得更简单。SQL宏命令可以用在正常SQL表达 式使用的任意位置进行查询。

 一个 FortiAnalyzer特定函数是root_domain(hostname)。此函数提供全称域名的根域。在每次查询时,在这个 示例中,root_domain(hostname) 在website 列以升序列出。 ( ORDER BY子句没有定义时的默认值)。

 另一个FortiAnalyzer特定函数是nullifna,可以取一个表达式作为一个参数。实际的SQL语法是基于SELECT NULLIF(NULLIF(expression, ‘N/A’), ‘n/a’)。

  在这个示例中,如果用户是 n/a,则显示源IP,否则返回用户名。函数执行COALESCE 函数相反的运算。正如 在 user_src 列中看到的,有一些是IP地址,一些是用户名。

 email_domain 和email_user 是其它 FortiAnalyzer特定函数。 email_domain检索邮件地址中在@ 符号之后的 任意字符串—域名。检索邮件地址中在@ 符号之前的任意字符串。

  每次查询时,在这个示例中 email_user 在e_user列中显示, email_domain 在e_domain列中显示。

 from_dtime 和from_itime是其它 FortiAnalyzer特定函数。 from_dtime 返回没有时区的设备时间戳,from_itime 返回没有时区的 FortiAnalyzer时间戳。

  每次查询时,from_itime 在faz_local_time中显示,from_dtime 在dev_local_time列中显示。

 这里是一些FortiAnalyzer中使用的常见数据和时间宏命令。宏命令可以把复杂的SQL声明变得简单—通常用于 创建频繁使用的SQL声明。

教程篇(5.4) 06. FortiAnalyzer SQL和数据集 ❀ Fortinet 网络安全专家 NSE5相关推荐

  1. 教程篇(6.0) 06. 证书操作 ❀ FortiGate 安全 ❀ Fortinet 网络安全专家 NSE 4

    在本课中,你将了解FortiGate为什么使用数字证书,如何配置FortiGate以使用证书(包括使用证书检查加密流量的内容),以及FortiGate如何管理证书. 在本次课程中,你将探讨以下主题: ...

  2. 教程篇(7.0) 08. FortiGate基础架构 诊断 ❀ Fortinet 网络安全专家 NSE 4

     在本节课中,你将学习如何使用诊断命令和工具.  本节课,你将学习上图显示的主题.  通过展示一般诊断能力,你将能够发现有关FortiGate状态的一般信息.  为了定义任何问题,首先必须知道网络的正 ...

  3. 教程篇(7.0) 09. FortiGate安全 应用控制 ❀ Fortinet 网络安全专家 NSE 4

     在本课中,你将学习如何监视和控制可能使用标准或非标准协议和端口的网络应用程序,而不仅仅是简单地阻止或允许协议.端口号或IP地址.  本节课,你将学习上图显示的主题.  通过展示应用控制基础知识,你将 ...

  4. 教程篇(7.0) 03. FortiGate安全 防火墙策略 ❀ Fortinet 网络安全专家 NSE 4

     在本课中你将了解防火墙策略,以及如何应用它们来允许和拒绝通过FortiGate的流量.FortiGate的核心是一个防火墙,所以它对你的流量所做的几乎所有事情都与你的防火墙策略相关联.  本节课你将 ...

  5. 教程篇(7.0) 02. FortiGate安全 安全架构 ❀ Fortinet 网络安全专家 NSE 4

     在本课中,你将了解Fortinet安全架构.  通过展示在部署Fortinet安全架构.使用和扩展安全架构功能以及了解其拓扑结构方面的能力,你将能够在你的网络中有效地使用Fortinet安全架构. ...

  6. 教程篇(7.0) 04. FortiClient 部署 ❀ FortiClient EMS ❀ Fortinet 网络安全专家 NSE 5

     在本课中,你将学习如何部署FortiClient,以及如何使用FortiClient EMS管理部署包.  通过展示FortiClient部署能力,你将能够准备Windows Active Dire ...

  7. 教程篇(7.2) 11. 安全架构 FortiGate安全 ❀ Fortinet网络安全专家 NSE4

     在本节课中,你将了解Fortinet安全架构.  通过展示部署Fortinet安全架构的能力,使用和扩展安全架构功能,并了解其拓扑结构,你将能够在你的网络里有效地使用Fortinet安全架构.  通 ...

  8. 教程篇(6.0) 02. 防火墙策略 ❀ FortiGate 安全 ❀ Fortinet 网络安全专家 NSE 4

    在本课中,你将学习如何理解和应用防火墙策略来允许和拒绝通过 FortiGate 的流量.它的核心是防火墙,所以它对你的流量所做的几乎所有事情都与你的防火墙策略相关联. 在本次课程中,你将探讨以下主题: ...

  9. 教程篇(7.2) 02. 防火墙策略 FortiGate安全 ❀ Fortinet网络安全专家 NSE4

     在本节课中,你将了解防火墙策略以及如何应用它们来允许和拒绝通过FortiGate的流量.就其核心而言,FortiGate是一个防火墙,因此它对你的流量所做的几乎所有事情都与你的防火墙策略相关联.   ...

最新文章

  1. groovy 兼容 java,升级Groovy 1.7 - 2.1不兼容
  2. spring boot 启动卡住_SpringBoot 居然有 44 种应用启动器
  3. 【剑指offer】面试题21:调整数组顺序使奇数位于偶数前面
  4. java 判断请求为 ajax请求_请问如何判断一个请求是不是ajax请求?
  5. 视频数据训练太慢?试试UT-AustinFAIR提出的多重网格训练,加速4.5倍,还能提点!...
  6. gRPC入门教程汇总
  7. leetcode Valid Palindrome
  8. C项目案例实践(0)-语言基础
  9. 前端三大框架有哪些异同?
  10. 《哈佛大学公开课:幸福课》学习笔记(3)
  11. html 表单 设计编辑器,可视化页面编辑器的架构设计
  12. 【2021-04-25】APP逆向之某智网加密数据
  13. 我的ElasticSearch认证工程师之路
  14. 理解Web 3:非事后的想法
  15. rono在oracle的作用_Ronopterin (VAS203) 在中重度创伤性脑损伤患者中的疗效 (NOSTRA III 期试验): 一项验证性、安慰剂对照、随机、双盲、多中心研究。...
  16. 什么行业程序员不用996?
  17. C++中的全局变量声明和定义
  18. python的wxpyton库开发的聊天程序
  19. 东芝三星正式停产光驱:市场只剩两家
  20. SQL下三种执行CMD命令的方法

热门文章

  1. Load Switch介绍与使用
  2. Windows访问控制 -- SID
  3. 宇文成 Python 学生信息管理系统
  4. 思考游戏王决斗链接中抽卡概率问题
  5. 【广告算法工程师入门 14】机制设计-带有保留价的拍卖与最优保留价
  6. java date the type is ambiguous,一个java ambiguous method 的问题
  7. Mybatis-plus更新字段为null
  8. 小学教师计算机培训试题,中小学教师职前培训考试试题
  9. PostgreSQL数据库中的角色(Role)、用户(User)、模式(Schema)
  10. 服务器操作系统有哪些