python之路-第11周

目录

1.sqlalchemy模块

人称最高端的ORM模块,能支持好多数据库,这里就搞一搞mysql。

pymysql:mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

(1)、来个例子:基本用法


from sqlalchemy import create_engine  #用于创建连接
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String  #创建表时候的列,int和str类型
from  sqlalchemy.orm import sessionmaker
 
Base = declarative_base() #生成一个SqlORM 基类
 
#之前必须要先创建一个test库,create database test.
engine = create_engine("mysql+mysqldb://root@localhost:3306/test",echo=False)  
#engine = create_engine("mysql+mysqldb://root@localhost:3306/test",echo=True)  #echo能够显示中间过程,可以看到自动生成的SQL语句
#engine = create_engine("mysql+pymysql://root:password@localhost:3306/test",echo=True)
 
 
class Host(Base):
    #创建一个Host表,表名称为hosts,有id,hostnmae,ip_addr和port四列。
    __tablename__ = 'hosts'
    id = Column(Integer,primary_key=True,autoincrement=True)  #自增,如果不加的话自己从1开始递增
    hostname = Column(String(64),unique=True,nullable=False)
    ip_addr = Column(String(128),unique=True,nullable=False)
    port = Column(Integer,default=22)  #默认22
 
Base.metadata.create_all(engine) #创建所有表结构
 
if __name__ == '__main__':
    SessionCls = sessionmaker(bind=engine) #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
    session = SessionCls()
    #h1 = Host(hostname='localhost',ip_addr='127.0.0.1')
    #h2 = Host(hostname='ubuntu',ip_addr='192.168.2.243',port=20000)
    #h3 = Host(hostname='ubuntu2',ip_addr='192.168.2.244',port=20000)
    #session.add(h3)  #增加h3
    #session.add_all( [h1,h2])  #批量增加,注意要传入列表
    #h2.hostname = 'ubuntu_test' #只要没提交,此时修改也没问题
    #session.rollback()  #回滚
    #session.commit() #提交
    res = session.query(Host).filter(Host.hostname.in_(['ubuntu2','localhost'])).all()  
    #相当于数据库select操作:select * from Host where hostname in ('ubuntu2','localhost');
    print(res)

(2)、增删改查


#!/usr/bin/env python
# -*- coding:utf-8 -*-
  
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
  
engine = create_engine("mysql+mysqldb://root:123@127.0.0.1:3306/s11", max_overflow=5)
  
Base = declarative_base()
  
  
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
  
# 寻找Base的所有子类,按照子类的结构在数据库中生成对应的数据表信息
# Base.metadata.create_all(engine)
  
Session = sessionmaker(bind=engine)
session = Session()
  
  
# ########## 增 ##########
# u = User(id=2, name='sb')
# session.add(u)
# session.add_all([
#     User(id=3, name='sb'),
#     User(id=4, name='sb')
# ])
# session.commit()
  
# ########## 删除 ##########
# session.query(User).filter(User.id > 2).delete()
# session.commit()
  
# ########## 修改 ##########
# session.query(User).filter(User.id > 2).update({'cluster_id' : 0})
# session.commit()
# ########## 查 ##########
# ret = session.query(User).filter_by(name='sb').first()
  
# ret = session.query(User).filter_by(name='sb').all()
# print ret
  
# ret = session.query(User).filter(User.name.in_(['sb','bb'])).all()
# print ret
  
# ret = session.query(User.name.label('name_label')).all()
# print ret,type(ret)
  
# ret = session.query(User).order_by(User.id).all()
# print ret
  
# ret = session.query(User).order_by(User.id)[1:3]
# print ret
# session.commit()


2.堡垒机

之前先推荐一本书啊~~~ 《消费者行为学》

(1) 堡垒机是啥?

比简单的跳板机更牛逼,具备权限和审计功能。

另外,堡垒机十分重要,是整个信息系统安全中很重要的一环。

(2)需求:

业务需求:

  • 兼顾业务安全目标与用户体验,堡垒机部署后,不应使用户访问业务系统的访问变的复杂,否则工作将很难推进,因为没人喜欢改变现状,尤其是改变后生活变得更艰难
  • 保证堡垒机稳定安全运行, 没有100%的把握,不要上线任何新系统,即使有100%把握,也要做好最坏的打算,想好故障预案

功能需求:

  • 所有的用户操作日志要保留在数据库中
  • 每个用户登录堡垒机后,只需要选择具体要访问的设置,就连接上了,不需要再输入目标机器的访问密码
  • 允许用户对不同的目标设备有不同的访问权限,例:
    - 对10.0.2.34 有mysql 用户的权限
    - 对192.168.3.22 有root用户的权限
    - 对172.33.24.55 没任何权限
  • 分组管理,即可以对设置进行分组,允许用户访问某组机器,但对组里的不同机器依然有不同的访问权限
posted @ 2016-04-01 10:55  felo  阅读(153)  评论(0编辑  收藏  举报