trivy如何从非关系型数据库查询数据

本文详细介绍了trivyDB的存储内容,通过一张图概述db结构,并通过源码分析展示了数据查询逻辑。首先从db中获取(os-release, pkgName)对应的所有CVE,再通过版本筛选,最后通过Get方法获取pkg bucket中的CVE信息,实现精准查询。" 128733869,17176263,Verilog HDLBits教程:基本逻辑门实现,"['FPGA开发', 'Verilog', '逻辑设计']
摘要由CSDN通过智能技术生成

一、trivyDB的存储内容

一张图概括

在这里插入图片描述

从已有的db中查看

  • 这里我写了个demo,主要分析vulnerability bucket 以及 ubuntu 20.04 bucket, 其中 ubuntu 20.04 bucket 是一个嵌套 bucket 里面嵌套了很多 pkgName bucket
package main

import (
	"fmt"
	"time"

	bolt "go.etcd.io/bbolt"
)

func main() {
   
	db, err := bolt.Open("trivy.db", 0600, &bolt.Options{
   Timeout: 1 * time.Second})
	if err != nil {
   
		panic("init trivydb failed")
	}
	
	db.View(func(tx *bolt.Tx) error {
   
		dataSource := tx.Bucket([]byte("vulnerability"))
		dataSource.ForEach(func(k, v []byte) error {
   
			if string(k) == "CVE-2022-24809" {
   
				fmt.Println(string(k))
				fmt.Println(string(v))
			}

			return nil
		})

		return nil
	})
	db.View(func(tx *bolt.Tx) error {
   
		tx.ForEach(func(name []byte, b *bolt.Bucket) error {
   
			fmt.Println(string(name))
			if string(name) == "ubuntu 20.04" {
   
				fmt.Println(string(name))
				b.ForEach(func(k, v []byte) error {
   
					// fmt.Println(string(k))
					if string(k) == "curl" {
   
						fmt.Println(string(k))
						nestedbucket := b.Bucket([]byte("curl"))
						nestedbucket.ForEach(func(k, v 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值