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 没任何权限 - 分组管理,即可以对设置进行分组,允许用户访问某组机器,但对组里的不同机器依然有不同的访问权限