多表和视图联合查询,实现MVM扫描任务详细SOC Case----去重,联合,stuff,触发器赋权

SELECT distinct([faultline].[MVMLive].[vwScan].[JobID])
      ,[faultline].[dbo].[Users].Name
      ,[faultline].[MVMLive].[vwScan].[ConfigurationName]
      ,[faultline].[MVMLive].[vwScan].[StartTime]
      ,[faultline].[MVMLive].[vwScan].[EndTime]
       ,STUFF((select ‘, ‘+(StartIPAddressIPv4+‘-‘+EndIPAddressIPv4) from [faultline].[MVMLive].[vwScannedIPRange]where JobID=5 for XML path(‘‘)),1,1,‘‘)
  FROM [faultline].[MVMLive].[vwScan]
  left join [faultline].[dbo].[Jobs]on [faultline].[dbo].[Jobs].JobID= [faultline].[MVMLive].[vwScan].JobID
  left join [faultline].[dbo].[Users]on [faultline].[dbo].[Jobs].UserID=[faultline].[dbo].[Users].UserID
  left join [faultline].[MVMLive].[vwScannedIPRange] on [faultline].[MVMLive].[vwScannedIPRange].JobID=[faultline].[MVMLive].[vwScan].[JobID]
  where [faultline].[MVMLive].[vwScan].JobID= 5

以上语句涉及到的知识点:

1.distinct 查询结果去重功能。

2.联合查询left join, 联合条件不一定必须是主表的,如 [faultline].[dbo].[Jobs].UserID=[faultline].[dbo].[Users].UserID。即是说,1、2、3,不一定非得,1-2和1-3的方式联合,也可以是,1-2和2-3的联合。

3.视图和表的混用,[faultline].[MVMLive].[vwScannedIPRange]就是视图,实际使用中发现视图的执行需要额外的权限----相关的触发器的权限,Fslong2IP,

4.为特定的视图、表、触发器、存储过程赋权的语句 grant execute/select on Fslong2IP to arcsight

5.stuff 函数的使用,字符替换。

视图和触发器的概念和关系:

视图就是查询结果,这个结果也是以表的形式展示的。触发器是在执行增删改等表的操作时,额外需要执行的一些动作。猜测上边的Fslong2IP多半是一个将16进制存储的IP转换成字符串的函数,这个函数并不会显式执行,

只有当需要获得IP字符串的时候,才会被调用执行,这也是为什么arcsight账号没有权限执行,需要单独对這个触发器赋权的原因。

---------------------2015/2/10 14:14 进过多次修改和优化后的实现---------------------------------------

use faultline
go
create view jobdesIPrange as
SELECT JobID,
cast((select StartIPAddressIPv4 +‘-‘+EndIPAddressIPv4+ ‘,‘ from  [faultline].[MVMLive].[vwScannedIPRange] where JobID = A.jobid for XML PATH(‘‘)) as varchar(1000)) as iprange
from [faultline].[MVMLive].[vwScannedIPRange] A
group by jobid

cast--转换为字符串,而且指定了字符串的长度,否则默认只有30,查询结果缺失。

xml path(‘‘)实现不同条目的统一字段的按条件拼接。有用到一种技巧,自连接条件,JobID = A.jobid。

use faultline
go
create view forsoccase as
SELECT [faultline].[MVMLive].[vwScan].[JobID]
          ,[faultline].[dbo].[Users].Name as UserName
      ,[faultline].[MVMLive].[vwScan].[ConfigurationName] as TaskName
      ,[faultline].[MVMLive].[vwScan].[StartTime]
      ,[faultline].[MVMLive].[vwScan].[EndTime]
      ,[faultline].[dbo].engines.serveraddress as ScanSource
       ,[faultline].[dbo].jobdesIPrange.iprange as ScanDestination
  FROM [faultline].[MVMLive].[vwScan]
  left join [faultline].[dbo].[Jobs]on [faultline].[dbo].[Jobs].JobID= [faultline].[MVMLive].[vwScan].JobID
  left join [faultline].[dbo].[Users]on [faultline].[dbo].[Jobs].UserID=[faultline].[dbo].[Users].UserID
  left join [faultline].[dbo].jobdesIPrange on [faultline].[dbo].jobdesIPrange.JobID=[faultline].[MVMLive].[vwScan].[JobID]
  left join [faultline].[dbo].engines on [faultline].[MVMLive].[vwScan].[EngineName]=[faultline].[dbo].engines.name
  where [faultline].[MVMLive].[vwScan].JobID > 0

use faultline
go

grant execute on Fslong2IP to arcsight

-------------------2015/2/13 11:26 -----------------------

由于系统时间是UTC 0的形式存储于数据库中,显示的时间比正常时间少了8小时,修改对应字段。

,dateadd(hour,8,[faultline].[MVMLive].[vwScan].[StartTime]) StartTime
      ,dateadd (hour,8,[faultline].[MVMLive].[vwScan].[EndTime]) EndTime

时间: 2024-10-05 01:05:11

多表和视图联合查询,实现MVM扫描任务详细SOC Case----去重,联合,stuff,触发器赋权的相关文章

以面向对象的思想实现数据表的添加和查询,JDBC代码超详细

以面向对象的思想编写JDBC程序,实现使用java程序向数据表中添加学生信息,并且可以实现给定×××号查询学生信息或给定准考证号查询学生信息. 创建的数据表如下: CREATE TABLE EXAMSTUDENT(FlowID INTEGER,Type INTEGER,IDCard VARCHAR(18),ExamCard VARCHAR(15),StudentName VARCHAR(20),Location VARCHAR(20),Grade INTEGER);1.首先实现通过java程序在

2015-10-19 SQL(新建数据库、创建表、注释、查询语句、新增、更新、删除、联合查询)

1.认识数据库并新建: 1)打开数据库,连接到服务器. 2)服务里类型不用管. 3)服务器名称:打个点“.”表示服务器在本地计算机,如果是托管在别人的服务器上,就输入服务器IP地址. 4)身份验证:如果是windows身份验证,就需要有管理员权限.一般托管在别人的服务器上,(包括正常情况下),都是用SQL身份验证,需要输入sa和密码(密码就是安装时让输入的密码). 2.  建立数据库: 在建立数据库名称时(各种名称时),都遵守一个命名规则: 1)用英文命名 2)每个单词的首字母大写(驼峰原则:首

2015.7.30 第十五课 sql(新建数据库、创建表、注释、查询语句、新增、更新、删除、联合查询)

1.认识数据库并新建: 1)打开数据库,连接到服务器. 2)服务里类型不用管. 3)服务器名称:打个点“.”表示服务器在本地计算机,如果是托管在别人的服务器上,就输入服务器IP地址. 4)身份验证:如果是windows身份验证,就需要有管理员权限.一般托管在别人的服务器上,(包括正常情况下),都是用SQL身份验证,需要输入sa和密码(密码就是安装时让输入的密码). 2.  建立数据库: 在建立数据库名称时(各种名称时),都遵守一个命名规则: 1)用英文命名 2)每个单词的首字母大写(驼峰原则:首

表或视图赋予查询权限

第一步:Windows身份验证登录 第二步:新建登录用户 第三步:修改新加账号的属性: 第四步:修改目标表视图的权限设置 原文地址:https://www.cnblogs.com/coderCool/p/10215915.html

对于多表联合查询的一点理解

操作数据库时多表联合查询很常见.也知道常见联合查询的集中类型,内连接.外连接.全连接.自连接,外连接又分为左连接和右连接. 这些概念我一直都知道,但对于感念的理解并不透彻.对于不同类型的联合查询的结果数据集合没有清晰的区分.前两天,工作中又遇到的这样的问题,才开始弄明白. 内连接:传统写法:select a.*,b.* from a,b where a.column=b.column; 新式写法:select a.* from a inner join b on a.column=b.colum

数据库、数据表的基本操作及查询数据

数据库的基本操作 创建数据库 CREATE DATABASE database_name database_name为要创建的数据库的名称 删除数据库 DROP DATABASE database_name database_name为要删除的数据库的名称 数据库存储引擎 数据库存储引擎是数据库底层软件组成,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据操作. MySQL的核心就是存储引擎. 存储引擎比较 |功能|MyISAM|Memory|InnoDB|Archive|

联合查询的用法

联合查询效率较高,以下例子来说明联合查询(内联inner join .左联left outer join .右联right outer join .全联full outer join)的好处及用法: 第一:内联(inner join). 如果想把用户信息.积分.等级都列出来,那么一般会这样写:select * from T1 ,T3 where T1.userid = T3.userid(其实这样的结果等同于select * from T1 inner join T3 on T1.userid=

MySQL联合查询语法内联、左联、右联、全联

MySQL联合查询效率较高,以下例子来说明联合查询(内联.左联.右联.全联)的好处: T1表结构(用户id,用户名,密码)   userid   username  password 1   jack jackpwd    2   owen   owenpwd T2表结构(用户id,用户积分,用户等级)   userid(int)   jifen   dengji     1    20   3       3    50    6 第一:内联( inner join )如果想把用户信息.积分.

SQL联合查询(内联、左联、右联、全联)语法

SQL联合查询(内联.左联.右联.全联)语法 概述: 联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer join .右联right outer join  .全联full outer join 的好处及用法. 联合查询效率较高,以下例子来说明联合查询(内联.左联.右联.全联)的好处: T1表结构            (用户名,密码) userid(int) username            varchar(20) password