zoukankan      html  css  js  c++  java
  • 主机管理+堡垒机系统开发:表结构设计(二)

    一、创建django项目和app web

    二、主机表

    1、主机表代码:

        """存储所有主机"""
        hostname = models.CharField(max_length=64)
        ip_addr = models.GenericIPAddressField(unique=True)
        port = models.PositiveSmallIntegerField(default=22)
        idc = models.ForeignKey("IDC")
    
        enabled = models.BooleanField(default=True)
        #是否已启用,代表这台机器是否能登陆
        def __str__(self):
            return self.ip_addr

    1、hostname需要唯一的?

    它不一定唯一,有可能是重的

    2、这台机器的用户名密码要不要在这存?

    不用,因为主机和用户名密码是一对多的 关系,一条存的下吗?
    是否已启用,代表这台机器是否能登陆

    2、IDC表代码

    class IDC(models.Model):
        name = models.CharField(max_length=64,unique=True)
    
        def __str__(self):
            return self.name 

    三、主机组表

    1、解决了什么问题:

      一个人管理500台机器我给他一个一个添加吗?,我是不是要创建一个主机组

    2、主机表代码

    class HostGroup(models.Model):
        """主机组"""
        name = models.CharField(max_length=64, unique=True)
        hosts  = models.ManyToManyField("Host")
        def __str__(self):
            return self.name

    四、远程用户表

    1、解决了什么问题:

    有些远程的主机不能密钥,所以必须存密码

    2、主机表代码

    class RemoteUser(models.Model):
        """存储远程用户名密"""
        username = models.CharField(max_length=64)
        auth_type_choices = ((0,'ssh/password'),(1,'ssh/key'))
        auth_type = models.SmallIntegerField(choices=auth_type_choices,default=0)
        password = models.CharField(max_length=128,blank=True,null=True)
    
        hosts = models.ManyToManyField("Host")
    
        def __str__(self):
            return "%s(%s)%s" %( self.username,self.get_auth_type_display(),self.password)
    

    3、字段设计原因

    1、username要不要唯一?

      为什么不用,这个账户里面存的是多台机器的用户名密码

    2、可不可以有密钥和密码?

      有些机器用密码,有些机器用密码,你总的区分吧!

    3、password在这个存的是什么格式的?

    1. 存的是什么的密码?远程主机的你能在这加密吗?
    2. 你输入密码的时候输入的密文吗?你知道你机器上的密文在哪吗?你知道它的加密算法吗?
    3. 你加密了之后传给他,他认为是明文,然后他再加密一次。所以只能存明文

    4、如果选择是密钥的时候?还需要存用户名和密码吗?

      不需要

    六、堡垒机账户表

    class UserProfile(models.Model):
    	"""堡垒机的账户"""
        user = models.OneToOneField(User)
        name = models.CharField(max_length=64)
        bind_hosts = models.ManyToManyField("BindHost",blank=True)
        host_groups = models.ManyToManyField(HostGroup)
    	
        def __str__(self):
            return self.name
    

      

  • 相关阅读:
    网站优化,dns预解析,解析缓存
    dos命名重启或关闭远程服务器
    IIS 常见问题集记录
    EF 基础提供程序在 Open 上失败
    flexbox学习
    svn post-commit 同步
    备份
    log4net 2.0.4有问题,AdoNetAppender会报错
    signalr 配置错误跟踪
    Facebook的Web开发三板斧:React.js、Relay和GraphQL
  • 原文地址:https://www.cnblogs.com/luoahong/p/9433854.html
Copyright © 2011-2022 走看看