zoukankan      html  css  js  c++  java
  • 堡垒机-数据库设计

     数据库表结构设计:

     层次结构:

    import sqlalchemy
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    #Column导入
    from  sqlalchemy import  Column,Enum, Integer, String,UniqueConstraint,ForeignKey,Table
    from sqlalchemy.orm import sessionmaker,relationship
    from sqlalchemy_utils import ChoiceType,PasswordType
    
    
    Base = declarative_base()#生成orm基类
    
    user_m2m_bindhost = Table('user_m2m_bindhost', Base.metadata,
                            Column('userprofile_id', Integer, ForeignKey('user_profile.id')),
                            Column('bindhost_id', Integer, ForeignKey('bind_host.id')),
                            )
    bindhost_m2m_hostgroup=Table('bindhost_m2m_hostgroup', Base.metadata,
                          Column('bindhost_id',Integer,ForeignKey('bind_host.id')),
                          Column('hostgroup_id',Integer,ForeignKey('host_group.id'))
    )
    
    user_m2m_hostgroup=Table('user_m2m_hostgroup', Base.metadata,
                          Column('userprofile_id',Integer,ForeignKey('user_profile.id')),
                          Column('hostgroup_id',Integer,ForeignKey('host_group.id'))
    )
    
    class  Host(Base):
        __tablename__ = 'host'
        id =Column(Integer,primary_key=True)
        hostname =Column(String(64),unique=True)
        ip = Column(String(64),unique=True)
        port=Column(Integer,default=22)
        # remote_users =relationship('RemoteUser', secondary = host_m2m_remoteuser, backref='hosts')
        def __repr__(self):
            return self.hostname
    class HostGroup(Base):
        __tablename__ = 'host_group'
        id = Column(Integer, primary_key=True)
        name = Column(String(64), unique=True)
        bind_hosts = relationship('BindHost',secondary="bindhost_m2m_hostgroup",backref="host_groups")
        def __repr__(self):
            return self.name
    class RemoteUser(Base):
        __tablename__ = 'remote_user'
        #创建联合唯一auth_type、username、password
        __table_args__ = (UniqueConstraint('auth_type', 'username', 'password', name='_user_passwd_uc'),)
        AuthTypes = [
            ('ssh-password', 'SSH/Password'),#第一个是存到数据库的,第二个是显示给我们看的
            ('ssh-key', 'SSH/KEY'),
        ]
        id = Column(Integer, primary_key=True, autoincrement=True)
        auth_type = Column(ChoiceType(AuthTypes))
        username = Column(String(64), nullable=False)
        password = Column(String(255))
    
    
    
        def __repr__(self):
            return self.username
    
    
    class BindHost(Base):
        '''
        192.168.1.11    web
        192.168.1.11    mysql
    
        '''
        __tablename__ = "bind_host"
        __table_args__ = (UniqueConstraint('host_id','remoteuser_id', name='_host_remoteuser_uc'),)
    
        id = Column(Integer, primary_key=True)
        host_id = Column(Integer,ForeignKey('host.id'))
        #group_id = Column(Integer,ForeignKey('group.id'))
        remoteuser_id = Column(Integer, ForeignKey('remote_user.id'))
        host = relationship("Host",backref="bind_hosts")
        #host_group = relationship("HostGroup",backref="bind_hosts")
        remote_user = relationship("RemoteUser",backref="bind_hosts")
        def __repr__(self):
            return "<%s -- %s >" %(self.host.ip,
                                       self.remote_user.username
                                      )
    
    class UserProfile(Base):
        __tablename__ = 'user_profile'
        id = Column(Integer, primary_key=True)
        username = Column(String(32), unique=True)
        password = Column(String(128))
    
        bindhosts =relationship('BindHost', secondary=user_m2m_bindhost, backref = 'user_profiles')
        host_groups = relationship("HostGroup", secondary = user_m2m_hostgroup, backref = "user_profiles")
        def __repr__(self):
            return self.username
    
    
    # class AuditLog(Base):
    #     pass
    
    
    if __name__ == '__main__':
        Base.metadata.create_all()  # 创建所有表结构
    
  • 相关阅读:
    Serialize and Deserialize Binary Tree
    sliding window substring problem汇总贴
    10. Regular Expression Matching
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接
    程序员如何写一份合格的简历?(附简历模版)
    9个提高代码运行效率的小技巧你知道几个?
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第六章 存储器层次结构
    24张图7000字详解计算机中的高速缓存
    《深入理解计算机系统》(CSAPP)实验四 —— Attack Lab
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第五章 优化程序性能
  • 原文地址:https://www.cnblogs.com/fuyuteng/p/9343104.html
Copyright © 2011-2022 走看看