多表和视图联合查询,实现MVM扫描任务详细SOC Case----去重,联合,stuff,触发器赋权
2015-02-26 16:47
253 查看
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
本文出自 “奋斗的菜鸟” 博客,谢绝转载!
,[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
本文出自 “奋斗的菜鸟” 博客,谢绝转载!
相关文章推荐
- 通过数据库读取,获取MVM各扫描任务的漏扫数量趋势统计以及详细信息查询
- 查询视图和单条数据的详细信息不用同一个视图,
- 在绑定控件中查询一条记录的详细信息的实现方法
- SQL语句查询存储过程 视图 所有表 触发器
- mysql多表联合查询返回一张表的内容实现代码
- 实现两个DataTable的联合查询
- 利用Java Reflection(反射)原理,在hibernate里面实现对单表、视图的动态组合查询
- 实现两个DataTable的联合查询(转载)
- Oracle中用sql查询获取数据库的所有触发器,所有存储过程,所有视图,所有表
- SilverLight触发器加Command命令实现一对多级联查询
- SilverLight商业应用程序开发---学习笔记(9)从摘要信息跳转到详细信息 导航到细节视图 在弹出窗体打开细节视图 使用DataGrid控件的行细节显示特性显示细节内容 主/从视图的实现
- 实现两个DataTable的联合查询(转载)
- Mysql:语法:存储程序(存储过程、存储函数、视图、触发器、计划任务)
- 实现两个DataTable的联合查询
- 实现动态查询列表视图数据
- 用Java实现导出SQLServer数据库中所有存储过程,视图,函数和触发器
- sql联合查询|sql交叉查询|除非同时指定了 TOP否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
- 实现动态查询列表视图数据
- jQuery-extend扩展插件之实现多表单标注颜色(常用于多条件联合查询)
- 在Oracle数据库中查询所有触发器、存储过程、视图、表的两种方法