try to use 'place-holder' in sql.

pull/236/head
Apex Liu 2019-11-29 20:33:14 +08:00
parent bfd8ef11e9
commit 0b10a1b1aa
9 changed files with 270 additions and 233 deletions

View File

@ -19,6 +19,7 @@ __all__ = ['get_db', 'SQL']
# TODO: use SQLAlchemy # TODO: use SQLAlchemy
# https://www.jianshu.com/p/0d234e14b5d3
class TPDatabase: class TPDatabase:
@ -119,7 +120,7 @@ class TPDatabase:
self.place_holder = '?' self.place_holder = '?'
self.sqlite_file = db_file self.sqlite_file = db_file
self._table_prefix = 'tp_' self._table_prefix = tp_cfg().database.db_prefix
self._conn_pool = TPSqlitePool(db_file) self._conn_pool = TPSqlitePool(db_file)
if not os.path.exists(db_file): if not os.path.exists(db_file):
@ -455,13 +456,19 @@ class TPSqlitePool(TPDatabasePool):
return False return False
def _do_transaction(self, conn, sql_list): def _do_transaction(self, conn, sql_list):
# s = ''
# v = None
try: try:
# 使用context manager发生异常时会自动rollback正常执行完毕后会自动commit # 使用context manager发生异常时会自动rollback正常执行完毕后会自动commit
with conn: with conn:
for sql in sql_list: for item in sql_list:
conn.execute(sql) # s = item['s']
# v = item['v']
conn.execute(item['s'], item['v'])
return True return True
except Exception as e: except Exception as e:
# log.d('|||', s, '|||', v, '|||', '\n')
# log.d('///', sql_list, '///', '\n')
log.e('[sqlite] _do_transaction() failed: {}\n'.format(e.__str__())) log.e('[sqlite] _do_transaction() failed: {}\n'.format(e.__str__()))
return False return False
@ -603,8 +610,8 @@ class TPMysqlPool(TPDatabasePool):
cursor = conn.cursor() cursor = conn.cursor()
try: try:
conn.begin() conn.begin()
for sql in sql_list: for item in sql_list:
cursor.execute(sql) conn.execute(item['s'], item['v'])
conn.commit() conn.commit()
return True return True
except pymysql.err.OperationalError as e: except pymysql.err.OperationalError as e:
@ -858,7 +865,7 @@ class SQL:
sql.append(';') sql.append(';')
return ' '.join(sql) return ' '.join(sql)
def query(self): def query(self, vars=None):
# 如果要分页,那么需要计算记录总数 # 如果要分页,那么需要计算记录总数
if self._limit is not None: if self._limit is not None:
sql = self._make_sql_counter_string() sql = self._make_sql_counter_string()
@ -874,8 +881,9 @@ class SQL:
sql = self._make_sql_query_string() sql = self._make_sql_query_string()
# log.d(sql, '\n') # log.d(sql, '\n')
db_ret = self._db.query(sql) db_ret = self._db.query(sql, vars)
if db_ret is not None:
for db_item in db_ret: for db_item in db_ret:
item = AttrDict() item = AttrDict()
for i in range(len(self._output_fields)): for i in range(len(self._output_fields)):

View File

@ -310,7 +310,7 @@ def update_account(handler, host_id, acc_id, args):
_router_ip = db_ret[0][2] _router_ip = db_ret[0][2]
_router_port = db_ret[0][3] _router_port = db_ret[0][3]
sql_list = [] sql_list = list()
sql = list() sql = list()
sql.append('UPDATE `{}acc` SET'.format(db.table_prefix)) sql.append('UPDATE `{}acc` SET'.format(db.table_prefix))
@ -334,7 +334,7 @@ def update_account(handler, host_id, acc_id, args):
# db_ret = db.exec(' '.join(sql)) # db_ret = db.exec(' '.join(sql))
# if not db_ret: # if not db_ret:
# return TPE_DATABASE # return TPE_DATABASE
sql_list.append(' '.join(sql)) sql_list.append({'s': ' '.join(sql), 'v': None})
if len(_router_ip) == 0: if len(_router_ip) == 0:
_name = '{}@{}'.format(args['username'], _host_ip) _name = '{}@{}'.format(args['username'], _host_ip)
@ -342,13 +342,13 @@ def update_account(handler, host_id, acc_id, args):
_name = '{}@{} (由{}:{}路由)'.format(args['username'], _host_ip, _router_ip, _router_port) _name = '{}@{} (由{}:{}路由)'.format(args['username'], _host_ip, _router_ip, _router_port)
# 运维授权 # 运维授权
sql = 'UPDATE `{}ops_auz` SET `name`="{name}" WHERE (`rtype`={rtype} AND `rid`={rid});'.format(db.table_prefix, name=_name, rtype=TP_ACCOUNT, rid=acc_id) sql = 'UPDATE `{tp}ops_auz` SET `name`={ph} WHERE (`rtype`={ph} AND `rid`={ph});'.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (_name, TP_ACCOUNT, acc_id)})
sql = 'UPDATE `{}ops_map` SET `a_name`="{name}", `protocol_type`={protocol_type}, `protocol_port`={protocol_port} ' \
'WHERE (a_id={aid});'.format(db.table_prefix, sql_s = 'UPDATE `{tp}ops_map` SET `a_name`={ph},`protocol_type`={ph},`protocol_port`={ph} WHERE (`a_id`={ph});' \
name=args['username'], protocol_type=args['protocol_type'], protocol_port=args['protocol_port'], ''.format(tp=db.table_prefix, ph=db.place_holder)
aid=acc_id) sql_v = (args['username'], args['protocol_type'], args['protocol_port'], acc_id)
sql_list.append(sql) sql_list.append({'s': sql_s, 'v': sql_v})
if not db.transaction(sql_list): if not db.transaction(sql_list):
return TPE_DATABASE return TPE_DATABASE
@ -366,20 +366,20 @@ def update_accounts_state(handler, host_id, acc_ids, state):
if db_ret is None or len(db_ret) == 0: if db_ret is None or len(db_ret) == 0:
return TPE_NOT_EXISTS return TPE_NOT_EXISTS
sql_list = [] sql_list = list()
sql = 'UPDATE `{}acc` SET state={state} WHERE id IN ({ids});' \ sql = 'UPDATE `{tp}acc` SET `state`={ph} WHERE `id` IN ({ids});' \
''.format(db.table_prefix, state=state, ids=acc_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, ids=acc_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, )})
# sync to update the ops-audit table. # sync to update the ops-audit table.
sql = 'UPDATE `{}ops_auz` SET state={state} WHERE rtype={rtype} AND rid IN ({rid});' \ sql = 'UPDATE `{tp}ops_auz` SET `state`={ph} WHERE `rtype`={ph} AND `rid` IN ({rid});' \
''.format(db.table_prefix, state=state, rtype=TP_ACCOUNT, rid=acc_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, rid=acc_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, TP_ACCOUNT)})
sql = 'UPDATE `{}ops_map` SET a_state={state} WHERE a_id IN ({acc_id});' \ sql = 'UPDATE `{tp}ops_map` SET `a_state`={ph} WHERE `a_id` IN ({acc_id});' \
''.format(db.table_prefix, state=state, acc_id=acc_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, acc_id=acc_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, )})
if db.transaction(sql_list): if db.transaction(sql_list):
return TPE_OK return TPE_OK
@ -424,23 +424,23 @@ def remove_accounts(handler, host_id, acc_ids):
acc_name += '(由{}:{}路由)'.format(_h_router_ip, _h_router_port) acc_name += '(由{}:{}路由)'.format(_h_router_ip, _h_router_port)
acc_names.append(acc_name) acc_names.append(acc_name)
sql_list = [] sql_list = list()
sql = 'DELETE FROM `{}acc` WHERE host_id={} AND id IN ({});'.format(db.table_prefix, host_id, acc_ids) sql = 'DELETE FROM `{tp}acc` WHERE `host_id`={ph} AND `id` IN ({ids});'.format(tp=db.table_prefix, ph=db.place_holder, ids=acc_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (host_id, )})
sql = 'DELETE FROM `{}group_map` WHERE type={} AND mid IN ({});'.format(db.table_prefix, TP_GROUP_ACCOUNT, acc_ids) sql = 'DELETE FROM `{tp}group_map` WHERE `type`={ph} AND `mid` IN ({ids});'.format(tp=db.table_prefix, ph=db.place_holder, ids=acc_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (TP_GROUP_ACCOUNT, )})
# 更新主机相关账号数量 # 更新主机相关账号数量
sql = 'UPDATE `{}host` SET acc_count=acc_count-{acc_count} WHERE id={host_id};'.format(db.table_prefix, acc_count=acc_count, host_id=host_id) sql = 'UPDATE `{tp}host` SET `acc_count`=`acc_count`-{ph} WHERE `id`={ph};'.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (acc_count, host_id)})
sql = 'DELETE FROM `{}ops_auz` WHERE rtype={rtype} AND rid IN ({rid});'.format(db.table_prefix, rtype=TP_ACCOUNT, rid=acc_ids) sql = 'DELETE FROM `{tp}ops_auz` WHERE `rtype`={ph} AND `rid` IN ({rid});'.format(tp=db.table_prefix, ph=db.place_holder, rid=acc_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (TP_ACCOUNT, )})
sql = 'DELETE FROM `{}ops_map` WHERE a_id IN ({acc_id});'.format(db.table_prefix, acc_id=acc_ids) sql = 'DELETE FROM `{tp}ops_map` WHERE `a_id` IN ({acc_id});'.format(tp=db.table_prefix, acc_id=acc_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
if not db.transaction(sql_list): if not db.transaction(sql_list):
return TPE_DATABASE return TPE_DATABASE

View File

@ -122,14 +122,14 @@ def update_policies_state(handler, p_ids, state):
sql_list = [] sql_list = []
sql = 'UPDATE `{}audit_policy` SET `state`={state} WHERE `id` IN ({p_ids});'.format(db.table_prefix, state=state, p_ids=p_ids) sql = 'UPDATE `{tp}audit_policy` SET `state`={ph} WHERE `id` IN ({p_ids});'.format(tp=db.table_prefix, ph=db.place_holder, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, )})
sql = 'UPDATE `{}audit_auz` SET `state`={state} WHERE `policy_id` IN ({p_ids});'.format(db.table_prefix, state=state, p_ids=p_ids) sql = 'UPDATE `{tp}audit_auz` SET `state`={ph} WHERE `policy_id` IN ({p_ids});'.format(tp=db.table_prefix, ph=db.place_holder, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, )})
sql = 'UPDATE `{}audit_map` SET `p_state`={state} WHERE `p_id` IN ({p_ids});'.format(db.table_prefix, state=state, p_ids=p_ids) sql = 'UPDATE `{tp}audit_map` SET `p_state`={ph} WHERE `p_id` IN ({p_ids});'.format(tp=db.table_prefix, ph=db.place_holder, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, )})
if db.transaction(sql_list): if db.transaction(sql_list):
return TPE_OK return TPE_OK
@ -144,14 +144,14 @@ def remove_policies(handler, p_ids):
sql_list = [] sql_list = []
sql = 'DELETE FROM `{}audit_policy` WHERE `id` IN ({p_ids});'.format(db.table_prefix, p_ids=p_ids) sql = 'DELETE FROM `{tp}audit_policy` WHERE `id` IN ({p_ids});'.format(tp=db.table_prefix, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
sql = 'DELETE FROM `{}audit_auz` WHERE `policy_id` IN ({p_ids});'.format(db.table_prefix, p_ids=p_ids) sql = 'DELETE FROM `{tp}audit_auz` WHERE `policy_id` IN ({p_ids});'.format(tp=db.table_prefix, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
sql = 'DELETE FROM `{}audit_map` WHERE `p_id` IN ({p_ids});'.format(db.table_prefix, p_ids=p_ids) sql = 'DELETE FROM `{tp}audit_map` WHERE `p_id` IN ({p_ids});'.format(tp=db.table_prefix, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
if db.transaction(sql_list): if db.transaction(sql_list):
return TPE_OK return TPE_OK
@ -185,13 +185,11 @@ def add_members(handler, policy_id, policy_type, ref_type, members):
for m in members: for m in members:
if m['id'] in exists_ids: if m['id'] in exists_ids:
continue continue
str_sql = 'INSERT INTO `{}audit_auz` (policy_id, type, rtype, rid, `name`, creator_id, create_time) VALUES ' \ sql_s = 'INSERT INTO `{tp}audit_auz` (`policy_id`,`type`,`rtype`,`rid`,`name`,`creator_id`,`create_time`) VALUES ' \
'({pid}, {t}, {rtype}, {rid}, "{name}", {creator_id}, {create_time});' \ '({ph},{ph},{ph},{ph},{ph},{ph},{ph});' \
''.format(db.table_prefix, ''.format(tp=db.table_prefix, ph=db.place_holder)
pid=policy_id, t=policy_type, rtype=ref_type, sql_v = (policy_id, policy_type, ref_type, m['id'], m['name'], operator['id'], _time_now)
rid=m['id'], name=m['name'], sql.append({'s': sql_s, 'v': sql_v})
creator_id=operator['id'], create_time=_time_now)
sql.append(str_sql)
if db.transaction(sql): if db.transaction(sql):
# return TPE_OK # return TPE_OK

View File

@ -56,20 +56,20 @@ def update_groups_state(handler, gtype, glist, state):
group_list = ','.join([str(i) for i in glist]) group_list = ','.join([str(i) for i in glist])
db = get_db() db = get_db()
sql_list = [] sql_list = list()
# 2. 更新记录 # 2. 更新记录
sql = 'UPDATE `{}ops_auz` SET state={state} WHERE rtype={rtype} AND rid={rid};' \ sql = 'UPDATE `{tp}ops_auz` SET `state`={ph} WHERE `rtype`={ph} AND `rid` IN ({rid});' \
''.format(db.table_prefix, state=state, rtype=gtype, rid=group_list) ''.format(tp=db.table_prefix, ph=db.place_holder, rid=group_list)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, gtype)})
sql = 'UPDATE `{}ops_map` SET {gname}_state={state} WHERE {gname}_id IN ({gids});' \ sql = 'UPDATE `{tp}ops_map` SET `{gname}_state`={ph} WHERE `{gname}_id` IN ({gids});' \
''.format(db.table_prefix, state=state, gname=gname, gids=group_list) ''.format(tp=db.table_prefix, ph=db.place_holder, gname=gname, gids=group_list)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state,)})
sql = 'UPDATE `{dbtp}group` SET state={state} WHERE id IN ({gids});' \ sql = 'UPDATE `{tp}group` SET `state`={ph} WHERE `id` IN ({gids});' \
''.format(dbtp=db.table_prefix, state=state, gids=group_list) ''.format(tp=db.table_prefix, ph=db.place_holder, gids=group_list)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state,)})
if db.transaction(sql_list): if db.transaction(sql_list):
return TPE_OK return TPE_OK
@ -96,11 +96,11 @@ def remove(handler, gtype, glist):
name_list = [n['name'] for n in s.recorder] name_list = [n['name'] for n in s.recorder]
sql_list = [] sql_list = list()
# 删除组与成员的映射关系 # 删除组与成员的映射关系
sql = 'DELETE FROM `{tpdp}group_map` WHERE `type`={t} AND `gid` IN ({ids});'.format(tpdp=db.table_prefix, t=gtype, ids=group_ids) sql = 'DELETE FROM `{tp}group_map` WHERE `type`={ph} AND `gid` IN ({ids});'.format(tp=db.table_prefix, ph=db.place_holder, ids=group_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (gtype,)})
# where = 'type={} AND gid IN ({})'.format(gtype, ','.join(group_list)) # where = 'type={} AND gid IN ({})'.format(gtype, ','.join(group_list))
# err = s.reset().delete_from('group_map').where(where).exec() # err = s.reset().delete_from('group_map').where(where).exec()
@ -108,8 +108,8 @@ def remove(handler, gtype, glist):
# return err # return err
# 删除组 # 删除组
sql = 'DELETE FROM `{tpdp}group` WHERE `type`={t} AND `id` IN ({ids});'.format(tpdp=db.table_prefix, t=gtype, ids=group_ids) sql = 'DELETE FROM `{tp}group` WHERE `type`={ph} AND `id` IN ({ids});'.format(tp=db.table_prefix, ph=db.place_holder, ids=group_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (gtype,)})
# where = 'type={gtype} AND id IN ({gids})'.format(gtype=gtype, gids=','.join(group_list)) # where = 'type={gtype} AND id IN ({gids})'.format(gtype=gtype, gids=','.join(group_list))
# err = s.reset().delete_from('group').where(where).exec() # err = s.reset().delete_from('group').where(where).exec()
# if err != TPE_OK: # if err != TPE_OK:
@ -125,17 +125,17 @@ def remove(handler, gtype, glist):
return TPE_PARAM return TPE_PARAM
# 将组从运维授权中移除 # 将组从运维授权中移除
sql = 'DELETE FROM `{}ops_auz` WHERE `rtype`={rtype} AND `rid` IN ({ids});'.format(db.table_prefix, rtype=gtype, ids=group_ids) sql = 'DELETE FROM `{tp}ops_auz` WHERE `rtype`={ph} AND `rid` IN ({ids});'.format(tp=db.table_prefix, ph=db.place_holder, ids=group_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (gtype,)})
sql = 'DELETE FROM `{}ops_map` WHERE `{gname}_id` IN ({ids});'.format(db.table_prefix, gname=gname, ids=group_ids) sql = 'DELETE FROM `{tp}ops_map` WHERE `{gname}_id` IN ({ids});'.format(tp=db.table_prefix, gname=gname, ids=group_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
# 将组从审计授权中移除 # 将组从审计授权中移除
sql = 'DELETE FROM `{}audit_auz` WHERE `rtype`={rtype} AND `rid` IN ({ids});'.format(db.table_prefix, rtype=gtype, ids=group_ids) sql = 'DELETE FROM `{tp}audit_auz` WHERE `rtype`={ph} AND `rid` IN ({ids});'.format(tp=db.table_prefix, ph=db.place_holder, ids=group_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (gtype,)})
# 注意,审计授权映射表中,没有远程账号相关信息,所以如果是远程账号组,则忽略 # 注意,审计授权映射表中,没有远程账号相关信息,所以如果是远程账号组,则忽略
if gtype != TP_GROUP_ACCOUNT: if gtype != TP_GROUP_ACCOUNT:
sql = 'DELETE FROM `{}audit_map` WHERE `{gname}_id` IN ({ids});'.format(db.table_prefix, gname=gname, ids=group_ids) sql = 'DELETE FROM `{tp}audit_map` WHERE `{gname}_id` IN ({ids});'.format(tp=db.table_prefix, gname=gname, ids=group_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
if not db.transaction(sql_list): if not db.transaction(sql_list):
return TPE_DATABASE return TPE_DATABASE
@ -178,20 +178,19 @@ def update(handler, gid, name, desc):
return TPE_NOT_EXISTS return TPE_NOT_EXISTS
gtype = db_ret[0][1] gtype = db_ret[0][1]
sql_list = [] sql_list = list()
# 2. 更新记录 # 2. 更新记录
sql = 'UPDATE `{}group` SET `name`="{name}", `desc`="{desc}" WHERE id={gid};' \ sql = 'UPDATE `{tp}group` SET `name`={ph}, `desc`={ph} WHERE `id`={ph};'.format(tp=db.table_prefix, ph=db.place_holder)
''.format(db.table_prefix, name=name, desc=desc, gid=gid) sql_list.append({'s': sql, 'v': (name, desc, gid)})
sql_list.append(sql)
# 3. 同步更新授权表和权限映射表 # 3. 同步更新授权表和权限映射表
# 运维授权 # 运维授权
sql = 'UPDATE `{}ops_auz` SET `name`="{name}" WHERE (`rtype`={rtype} AND `rid`={rid});'.format(db.table_prefix, name=name, rtype=gtype, rid=gid) sql = 'UPDATE `{tp}ops_auz` SET `name`={ph} WHERE (`rtype`={ph} AND `rid`={ph});'.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (name, gtype, gid)})
# 审计授权 # 审计授权
sql = 'UPDATE `{}audit_auz` SET `name`="{name}" WHERE (`rtype`={rtype} AND `rid`={rid});'.format(db.table_prefix, name=name, rtype=gtype, rid=gid) sql = 'UPDATE `{tp}audit_auz` SET `name`={ph} WHERE (`rtype`={ph} AND `rid`={ph});'.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (name, gtype, gid)})
if not db.transaction(sql_list): if not db.transaction(sql_list):
return TPE_DATABASE return TPE_DATABASE
@ -203,10 +202,12 @@ def add_members(gtype, gid, members):
# 向指定组中增加成员,同时根据授权策略,更新授权映射表 # 向指定组中增加成员,同时根据授权策略,更新授权映射表
db = get_db() db = get_db()
sql = [] sql_list = list()
for uid in members: for uid in members:
sql.append('INSERT INTO `{}group_map` (`type`, `gid`, `mid`) VALUES ({}, {}, {});'.format(db.table_prefix, gtype, gid, uid)) sql = 'INSERT INTO `{tp}group_map` (`type`,`gid`,`mid`) VALUES ({ph},{ph},{ph});'.format(tp=db.table_prefix, ph=db.place_holder)
if db.transaction(sql): sql_list.append({'s': sql, 'v': (gtype, gid, uid)})
if db.transaction(sql_list):
return policy.rebuild_auz_map() return policy.rebuild_auz_map()
else: else:
return TPE_DATABASE return TPE_DATABASE
@ -229,16 +230,20 @@ def remove_members(gtype, gid, members):
mids = ','.join([str(uid) for uid in members]) mids = ','.join([str(uid) for uid in members])
sql_list = [] sql_list = list()
sql = 'DELETE FROM `{tp}group_map` WHERE (`type`={ph} AND `gid`={ph} AND `mid` IN ({mids}));' \
''.format(tp=db.table_prefix, ph=db.place_holder, mids=mids)
sql_list.append({'s': sql, 'v': (gtype, gid)})
sql = 'DELETE FROM `{tp}ops_map` WHERE `{gname}_id`={ph} AND `{name}_id` IN ({ids});' \
''.format(tp=db.table_prefix, ph=db.place_holder, gname=gname, name=name, ids=mids)
sql_list.append({'s': sql, 'v': (gid,)})
_where = 'WHERE (type={gtype} AND gid={gid} AND mid IN ({mid}))'.format(gtype=gtype, gid=gid, mid=mids)
sql = 'DELETE FROM `{dbtp}group_map` {where};'.format(dbtp=db.table_prefix, where=_where)
sql_list.append(sql)
sql = 'DELETE FROM `{}ops_map` WHERE {gname}_id={gid} AND {name}_id IN ({ids});'.format(db.table_prefix, gname=gname, name=name, gid=gid, ids=mids)
sql_list.append(sql)
if gtype != TP_GROUP_ACCOUNT: if gtype != TP_GROUP_ACCOUNT:
sql = 'DELETE FROM `{}audit_map` WHERE {gname}_id={gid} AND {name}_id IN ({ids});'.format(db.table_prefix, gname=gname, name=name, gid=gid, ids=mids) sql = 'DELETE FROM `{tp}audit_map` WHERE `{gname}_id`={ph} AND `{name}_id` IN ({ids});' \
sql_list.append(sql) ''.format(tp=db.table_prefix, ph=db.place_holder, gname=gname, name=name, ids=mids)
sql_list.append({'s': sql, 'v': (gid,)})
if db.transaction(sql_list): if db.transaction(sql_list):
return TPE_OK return TPE_OK

View File

@ -137,7 +137,7 @@ def remove_hosts(handler, hosts):
host_ids = ','.join([str(i) for i in hosts]) host_ids = ','.join([str(i) for i in hosts])
sql_list = [] sql_list = list()
# step 1. 处理主机对应的账号 # step 1. 处理主机对应的账号
@ -164,23 +164,23 @@ def remove_hosts(handler, hosts):
if len(accs) > 0: if len(accs) > 0:
# 1.2 将账号从所在组中移除 # 1.2 将账号从所在组中移除
where = 'mid IN ({})'.format(acc_ids) where = 'mid IN ({})'.format(acc_ids)
sql = 'DELETE FROM `{}group_map` WHERE (type={} AND {});'.format(db.table_prefix, TP_GROUP_ACCOUNT, where) sql = 'DELETE FROM `{tp}group_map` WHERE (`type`={ph} AND {w});'.format(tp=db.table_prefix, ph=db.place_holder, w=where)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (TP_GROUP_ACCOUNT, )})
# if not db.exec(sql): # if not db.exec(sql):
# return TPE_DATABASE # return TPE_DATABASE
# 1.3 将账号删除 # 1.3 将账号删除
where = 'id IN ({})'.format(acc_ids) where = 'id IN ({})'.format(acc_ids)
sql = 'DELETE FROM `{}acc` WHERE {};'.format(db.table_prefix, where) sql = 'DELETE FROM `{tp}acc` WHERE {w};'.format(tp=db.table_prefix, w=where)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
# if not db.exec(sql): # if not db.exec(sql):
# return TPE_DATABASE # return TPE_DATABASE
sql = 'DELETE FROM `{}ops_auz` WHERE rtype={rtype} AND rid IN ({rid});'.format(db.table_prefix, rtype=TP_ACCOUNT, rid=acc_ids) sql = 'DELETE FROM `{tp}ops_auz` WHERE `rtype`={ph} AND `rid` IN ({rid});'.format(tp=db.table_prefix, ph=db.place_holder, rid=acc_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (TP_ACCOUNT, )})
sql = 'DELETE FROM `{}ops_map` WHERE a_id IN ({acc_ids});'.format(db.table_prefix, acc_ids=acc_ids) sql = 'DELETE FROM `{tp}ops_map` WHERE `a_id` IN ({acc_ids});'.format(tp=db.table_prefix, acc_ids=acc_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
# step 2. 处理主机 # step 2. 处理主机
s = SQL(db) s = SQL(db)
@ -200,18 +200,18 @@ def remove_hosts(handler, hosts):
# 2.1 将主机从所在组中移除 # 2.1 将主机从所在组中移除
where = 'mid IN ({})'.format(host_ids) where = 'mid IN ({})'.format(host_ids)
sql = 'DELETE FROM `{}group_map` WHERE (type={} AND {});'.format(db.table_prefix, TP_GROUP_HOST, where) sql = 'DELETE FROM `{tp}group_map` WHERE (`type`={ph} AND {w});'.format(tp=db.table_prefix, ph=db.place_holder, w=where)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (TP_GROUP_HOST, )})
# 2.2 将主机删除 # 2.2 将主机删除
where = 'id IN ({})'.format(host_ids) where = 'id IN ({})'.format(host_ids)
sql = 'DELETE FROM `{}host` WHERE {};'.format(db.table_prefix, where) sql = 'DELETE FROM `{tp}host` WHERE {w};'.format(tp=db.table_prefix, w=where)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
sql = 'DELETE FROM `{}ops_auz` WHERE rtype={rtype} AND rid IN ({rid});'.format(db.table_prefix, rtype=TP_HOST, rid=host_ids) sql = 'DELETE FROM `{tp}ops_auz` WHERE `rtype`={ph} AND rid IN ({rid});'.format(tp=db.table_prefix, ph=db.place_holder, rid=host_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (TP_HOST, )})
sql = 'DELETE FROM `{}ops_map` WHERE h_id IN ({host_ids});'.format(db.table_prefix, host_ids=host_ids) sql = 'DELETE FROM `{tp}ops_map` WHERE h_id IN ({host_ids});'.format(tp=db.table_prefix, host_ids=host_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
if not db.transaction(sql_list): if not db.transaction(sql_list):
return TPE_DATABASE return TPE_DATABASE
@ -238,19 +238,18 @@ def update_host(handler, args):
if db_ret is None or len(db_ret) == 0: if db_ret is None or len(db_ret) == 0:
return TPE_NOT_EXISTS return TPE_NOT_EXISTS
sql_list = [] sql_list = list()
sql = 'UPDATE `{}host` SET `os_type`={os_type}, `name`="{name}", `ip`="{ip}", `router_ip`="{router_ip}", ' \ sql_s = 'UPDATE `{tp}host` SET `os_type`={ph},`name`={ph},`ip`={ph},`router_ip`={ph}, ' \
'`router_port`={router_port}, `cid`="{cid}", `desc`="{desc}" WHERE `id`={host_id};' \ '`router_port`={ph},`cid`={ph},`desc`={ph} WHERE `id`={ph};' \
''.format(db.table_prefix, ''.format(tp=db.table_prefix, ph=db.place_holder)
os_type=args['os_type'], name=args['name'], ip=args['ip'], router_ip=args['router_ip'], router_port=args['router_port'], sql_v = (args['os_type'], args['name'], args['ip'], args['router_ip'], args['router_port'], args['cid'], args['desc'], args['id'])
cid=args['cid'], desc=args['desc'], host_id=args['id']) sql_list.append({'s': sql_s, 'v': sql_v})
sql_list.append(sql)
# 更新所有此主机相关的账号 # 更新所有此主机相关的账号
sql = 'UPDATE `{}acc` SET `host_ip`="{ip}", `router_ip`="{router_ip}", `router_port`={router_port} WHERE `host_id`={id};' \ sql_s = 'UPDATE `{tp}acc` SET `host_ip`={ph},`router_ip`={ph},`router_port`={ph} WHERE `host_id`={ph};' \
''.format(db.table_prefix, ''.format(tp=db.table_prefix, ph=db.place_holder)
ip=args['ip'], router_ip=args['router_ip'], router_port=args['router_port'], id=args['id']) sql_v = (args['ip'], args['router_ip'], args['router_port'], args['id'])
sql_list.append(sql) sql_list.append({'s': sql_s, 'v': sql_v})
# 同步更新授权表和权限映射表 # 同步更新授权表和权限映射表
_name = args['ip'] _name = args['ip']
@ -258,22 +257,26 @@ def update_host(handler, args):
_name = '{} [{}]'.format(args['name'], args['ip']) _name = '{} [{}]'.format(args['name'], args['ip'])
# 运维授权 # 运维授权
sql = 'UPDATE `{}ops_auz` SET `name`="{name}" WHERE (`rtype`={rtype} AND `rid`={rid});' \ sql_s = 'UPDATE `{tp}ops_auz` SET `name`={ph} WHERE (`rtype`={ph} AND `rid`={ph});' \
''.format(db.table_prefix, name=_name, rtype=TP_HOST, rid=args['id']) ''.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_v = (_name, TP_HOST, args['id'])
sql = 'UPDATE `{}ops_map` SET `h_name`="{hname}", `ip`="{ip}", `router_ip`="{router_ip}", `router_port`={router_port} ' \ sql_list.append({'s': sql_s, 'v': sql_v})
'WHERE (h_id={hid});'.format(db.table_prefix,
hname=args['name'], ip=args['ip'], hid=args['id'], sql_s = 'UPDATE `{tp}ops_map` SET `h_name`={ph},`ip`={ph},`router_ip`={ph},`router_port`={ph} WHERE (`h_id`={ph});' \
router_ip=args['router_ip'], router_port=args['router_port']) ''.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_v = (args['name'], args['ip'], args['router_ip'], args['router_port'], args['id'])
sql_list.append({'s': sql_s, 'v': sql_v})
# 审计授权 # 审计授权
sql = 'UPDATE `{}audit_auz` SET `name`="{name}" WHERE (`rtype`={rtype} AND `rid`={rid});'.format(db.table_prefix, name=_name, rtype=TP_HOST, rid=args['id']) sql_s = 'UPDATE `{tp}audit_auz` SET `name`={ph} WHERE (`rtype`={ph} AND `rid`={ph});' \
sql_list.append(sql) ''.format(tp=db.table_prefix, ph=db.place_holder)
sql = 'UPDATE `{}audit_map` SET `h_name`="{hname}", `ip`="{ip}", `router_ip`="{router_ip}", `router_port`={router_port} ' \ sql_v = (_name, TP_HOST, args['id'])
'WHERE (h_id={hid});'.format(db.table_prefix, sql_list.append({'s': sql_s, 'v': sql_v})
hname=args['name'], ip=args['ip'], hid=args['id'],
router_ip=args['router_ip'], router_port=args['router_port']) sql_s = 'UPDATE `{tp}audit_map` SET `h_name`={ph}, `ip`={ph}, `router_ip`={ph}, `router_port`={ph} WHERE (`h_id`={ph});' \
sql_list.append(sql) ''.format(tp=db.table_prefix, ph=db.place_holder)
sql_v = (args['name'], args['ip'], args['router_ip'], args['router_port'], args['id'])
sql_list.append({'s': sql_s, 'v': sql_v})
if not db.transaction(sql_list): if not db.transaction(sql_list):
return TPE_DATABASE return TPE_DATABASE
@ -289,20 +292,20 @@ def update_hosts_state(handler, host_ids, state):
host_ids = ','.join([str(i) for i in host_ids]) host_ids = ','.join([str(i) for i in host_ids])
sql_list = [] sql_list = list()
sql = 'UPDATE `{}host` SET `state`={state} WHERE `id` IN ({host_ids});' \ sql = 'UPDATE `{tp}host` SET `state`={ph} WHERE `id` IN ({host_ids});' \
''.format(db.table_prefix, state=state, host_ids=host_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, host_ids=host_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, )})
# sync to update the ops-audit table. # sync to update the ops-audit table.
sql = 'UPDATE `{}ops_auz` SET `state`={state} WHERE `rtype`={rtype} AND `rid` IN ({rid});' \ sql = 'UPDATE `{tp}ops_auz` SET `state`={ph} WHERE `rtype`={ph} AND `rid` IN ({rid});' \
''.format(db.table_prefix, state=state, rtype=TP_ACCOUNT, rid=host_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, rid=host_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, TP_ACCOUNT)})
sql = 'UPDATE `{}ops_map` SET `h_state`={state} WHERE `h_id` IN ({host_ids});' \ sql = 'UPDATE `{tp}ops_map` SET `h_state`={ph} WHERE `h_id` IN ({host_ids});' \
''.format(db.table_prefix, state=state, host_ids=host_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, host_ids=host_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, )})
if db.transaction(sql_list): if db.transaction(sql_list):
return TPE_OK return TPE_OK

View File

@ -135,14 +135,14 @@ def update_policies_state(handler, p_ids, state):
sql_list = [] sql_list = []
sql = 'UPDATE `{}ops_policy` SET `state`={state} WHERE `id` IN ({p_ids});'.format(db.table_prefix, state=state, p_ids=p_ids) sql = 'UPDATE `{tp}ops_policy` SET `state`={ph} WHERE `id` IN ({p_ids});'.format(tp=db.table_prefix, ph=db.place_holder, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, )})
sql = 'UPDATE `{}ops_auz` SET `state`={state} WHERE `policy_id` IN ({p_ids});'.format(db.table_prefix, state=state, p_ids=p_ids) sql = 'UPDATE `{tp}ops_auz` SET `state`={ph} WHERE `policy_id` IN ({p_ids});'.format(tp=db.table_prefix, ph=db.place_holder, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, )})
sql = 'UPDATE `{}ops_map` SET `p_state`={state} WHERE `p_id` IN ({p_ids});'.format(db.table_prefix, state=state, p_ids=p_ids) sql = 'UPDATE `{tp}ops_map` SET `p_state`={ph} WHERE `p_id` IN ({p_ids});'.format(tp=db.table_prefix, ph=db.place_holder, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (state, )})
if db.transaction(sql_list): if db.transaction(sql_list):
return TPE_OK return TPE_OK
@ -158,13 +158,13 @@ def remove_policies(handler, p_ids):
sql_list = [] sql_list = []
sql = 'DELETE FROM `{}ops_policy` WHERE `id` IN ({p_ids});'.format(db.table_prefix, p_ids=p_ids) sql = 'DELETE FROM `{}ops_policy` WHERE `id` IN ({p_ids});'.format(db.table_prefix, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
sql = 'DELETE FROM `{}ops_auz` WHERE `policy_id` IN ({p_ids});'.format(db.table_prefix, p_ids=p_ids) sql = 'DELETE FROM `{}ops_auz` WHERE `policy_id` IN ({p_ids});'.format(db.table_prefix, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
sql = 'DELETE FROM `{}ops_map` WHERE `p_id` IN ({p_ids});'.format(db.table_prefix, p_ids=p_ids) sql = 'DELETE FROM `{}ops_map` WHERE `p_id` IN ({p_ids});'.format(db.table_prefix, p_ids=p_ids)
sql_list.append(sql) sql_list.append({'s': sql, 'v': None})
if db.transaction(sql_list): if db.transaction(sql_list):
return TPE_OK return TPE_OK
@ -195,13 +195,11 @@ def add_members(handler, policy_id, policy_type, ref_type, members):
for m in members: for m in members:
if m['id'] in exists_ids: if m['id'] in exists_ids:
continue continue
str_sql = 'INSERT INTO `{}ops_auz` (policy_id, type, rtype, rid, `name`, creator_id, create_time) VALUES ' \ sql_s = 'INSERT INTO `{tp}ops_auz` (`policy_id`,`type`,`rtype`,`rid`,`name`,`creator_id`,`create_time`) VALUES ' \
'({pid}, {t}, {rtype}, {rid}, "{name}", {creator_id}, {create_time});' \ '({ph}, {ph}, {ph}, {ph}, {ph}, {ph}, {ph});' \
''.format(db.table_prefix, ''.format(tp=db.table_prefix, ph=db.place_holder)
pid=policy_id, t=policy_type, rtype=ref_type, sql_v = (policy_id, policy_type, ref_type, m['id'], m['name'], operator['id'], _time_now)
rid=m['id'], name=m['name'], sql.append({'s': sql_s, 'v': sql_v})
creator_id=operator['id'], create_time=_time_now)
sql.append(str_sql)
if db.transaction(sql): if db.transaction(sql):
# return TPE_OK # return TPE_OK
@ -221,7 +219,7 @@ def remove_members(handler, policy_id, policy_type, ids):
if err != TPE_OK: if err != TPE_OK:
return err return err
#return TPE_OK # return TPE_OK
return policy.rebuild_ops_auz_map() return policy.rebuild_ops_auz_map()

View File

@ -476,15 +476,18 @@ def session_fix():
if db.need_create or db.need_upgrade: if db.need_create or db.need_upgrade:
return TPE_OK return TPE_OK
sql_list = [] sql_list = list()
sql = 'UPDATE `{dbtp}record` SET state={new_state}, time_end={time_end} WHERE state={old_state};' \ sql_s = 'UPDATE `{tp}record` SET state={ph}, time_end={ph} WHERE state={ph};' \
''.format(dbtp=db.table_prefix, new_state=TP_SESS_STAT_ERR_RESET, old_state=TP_SESS_STAT_RUNNING, time_end=tp_timestamp_sec()) ''.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_v = (TP_SESS_STAT_ERR_RESET, tp_timestamp_sec(), TP_SESS_STAT_RUNNING)
sql_list.append({'s': sql_s, 'v': sql_v})
sql_s = 'UPDATE `{tp}record` SET state={ph},time_end={ph} WHERE state={ph};' \
''.format(tp=db.table_prefix, ph=db.place_holder)
sql_v = (TP_SESS_STAT_ERR_RESET, tp_timestamp_sec(), TP_SESS_STAT_STARTED)
sql_list.append({'s': sql_s, 'v': sql_v})
sql = 'UPDATE `{dbtp}record` SET state={new_state},time_end={time_end} WHERE state={old_state};' \
''.format(dbtp=db.table_prefix, new_state=TP_SESS_STAT_ERR_START_RESET, old_state=TP_SESS_STAT_STARTED, time_end=tp_timestamp_sec())
sql_list.append(sql)
return db.transaction(sql_list) return db.transaction(sql_list)

View File

@ -93,14 +93,14 @@ def remove_role(handler, role_id):
role_name = s.recorder[0].name role_name = s.recorder[0].name
sql_list = [] sql_list = list()
sql = 'DELETE FROM `{}role` WHERE id={};'.format(db.table_prefix, role_id) sql = 'DELETE FROM `{tp}role` WHERE `id`={ph};'.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (role_id, )})
# 更新此角色相关的用户信息 # 更新此角色相关的用户信息
sql = 'UPDATE `{}user` SET role_id=0 WHERE role_id={rid};'.format(db.table_prefix, rid=role_id) sql = 'UPDATE `{tp}user` SET `role_id`=0 WHERE `role_id`={ph};'.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_list.append({'s': sql, 'v': (role_id, )})
if not db.transaction(sql_list): if not db.transaction(sql_list):
return TPE_DATABASE return TPE_DATABASE

View File

@ -424,19 +424,26 @@ def update_user(handler, args):
_uname += '' + args['surname'] + '' _uname += '' + args['surname'] + ''
sql_list = [] sql_list = []
# 运维授权 # 运维授权
sql = 'UPDATE `{}ops_auz` SET `name`="{uname}" WHERE (`rtype`={rtype} AND `rid`={rid});' \ sql_s = 'UPDATE `{tp}ops_auz` SET `name`={ph} WHERE (`rtype`={ph} AND `rid`={ph});' \
''.format(db.table_prefix, uname=_uname, rtype=TP_USER, rid=args['id']) ''.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_v = (_uname, TP_USER, args['id'])
sql = 'UPDATE `{}ops_map` SET `u_name`="{uname}", `u_surname`="{surname}" WHERE (u_id={uid});'.format( sql_list.append({'s': sql_s, 'v': sql_v})
db.table_prefix, uname=args['username'], surname=args['surname'], uid=args['id'])
sql_list.append(sql) sql_s = 'UPDATE `{tp}ops_map` SET `u_name`={ph}, `u_surname`={ph} WHERE (u_id={ph});' \
''.format(tp=db.table_prefix, ph=db.place_holder)
sql_v = (args['username'], args['surname'], args['id'])
sql_list.append({'s': sql_s, 'v': sql_v})
# 审计授权 # 审计授权
sql = 'UPDATE `{}audit_auz` SET `name`="{uname}" WHERE (`rtype`={rtype} AND `rid`={rid});' \ sql_s = 'UPDATE `{tp}audit_auz` SET `name`={ph} WHERE (`rtype`={ph} AND `rid`={ph});' \
''.format(db.table_prefix, uname=_uname, rtype=TP_USER, rid=args['id']) ''.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_v = (_uname, TP_USER, args['id'])
sql = 'UPDATE `{}audit_map` SET `u_name`="{uname}", `u_surname`="{surname}" WHERE (u_id={uid});'.format( sql_list.append({'s': sql_s, 'v': sql_v})
db.table_prefix, uname=args['username'], surname=args['surname'], uid=args['id'])
sql_list.append(sql) sql_s = 'UPDATE `{tp}audit_map` SET `u_name`={ph}, `u_surname`={ph} WHERE (u_id={ph});' \
''.format(tp=db.table_prefix, ph=db.place_holder)
sql_v = (args['username'], args['surname'], args['id'])
sql_list.append({'s': sql_s, 'v': sql_v})
if not db.transaction(sql_list): if not db.transaction(sql_list):
return TPE_DATABASE return TPE_DATABASE
@ -630,25 +637,30 @@ def update_users_state(handler, user_ids, state):
sql_list = [] sql_list = []
sql = 'UPDATE `{}user` SET state={state} WHERE id IN ({ids});' \ sql_s = 'UPDATE `{tp}user` SET `state`={ph} WHERE `id` IN ({ids});' \
''.format(db.table_prefix, state=state, ids=user_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, ids=user_ids)
sql_list.append(sql) sql_v = (state, )
sql_list.append({'s': sql_s, 'v': sql_v})
sql = 'UPDATE `{}ops_auz` SET state={state} WHERE rtype={rtype} AND rid IN ({rid});' \ sql_s = 'UPDATE `{tp}ops_auz` SET `state`={ph} WHERE `rtype`={ph} AND `rid` IN ({ids});' \
''.format(db.table_prefix, state=state, rtype=TP_USER, rid=user_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, ids=user_ids)
sql_list.append(sql) sql_v = (state, TP_USER)
sql_list.append({'s': sql_s, 'v': sql_v})
sql = 'UPDATE `{}ops_map` SET u_state={state} WHERE u_id IN ({ids});' \ sql_s = 'UPDATE `{tp}ops_map` SET `u_state`={ph} WHERE `u_id` IN ({ids});' \
''.format(db.table_prefix, state=state, ids=user_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, ids=user_ids)
sql_list.append(sql) sql_v = (state, )
sql_list.append({'s': sql_s, 'v': sql_v})
sql = 'UPDATE `{}audit_auz` SET state={state} WHERE rtype={rtype} AND rid IN ({rid});' \ sql_s = 'UPDATE `{tp}audit_auz` SET `state`={ph} WHERE `rtype`={ph} AND `rid` IN ({rid});' \
''.format(db.table_prefix, state=state, rtype=TP_USER, rid=user_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, rid=user_ids)
sql_list.append(sql) sql_v = (state, TP_USER)
sql_list.append({'s': sql_s, 'v': sql_v})
sql = 'UPDATE `{}audit_map` SET u_state={state} WHERE u_id IN ({ids});' \ sql_s = 'UPDATE `{tp}audit_map` SET `u_state`={ph} WHERE `u_id` IN ({ids});' \
''.format(db.table_prefix, state=state, ids=user_ids) ''.format(tp=db.table_prefix, ph=db.place_holder, ids=user_ids)
sql_list.append(sql) sql_v = (state, )
sql_list.append({'s': sql_s, 'v': sql_v})
if db.transaction(sql_list): if db.transaction(sql_list):
return TPE_OK return TPE_OK
@ -663,15 +675,17 @@ def update_fail_count(handler, user_info):
is_locked = False is_locked = False
fail_count = user_info.fail_count + 1 fail_count = user_info.fail_count + 1
sql = 'UPDATE `{}user` SET fail_count={count} WHERE id={uid};' \ sql_s = 'UPDATE `{tp}user` SET `fail_count`={ph} WHERE `id`={ph};' \
''.format(db.table_prefix, count=fail_count, uid=user_info.id) ''.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_v = (fail_count, user_info.id)
sql_list.append({'s': sql_s, 'v': sql_v})
if sys_cfg.login.retry != 0 and fail_count >= sys_cfg.login.retry: if sys_cfg.login.retry != 0 and fail_count >= sys_cfg.login.retry:
is_locked = True is_locked = True
sql = 'UPDATE `{}user` SET state={state}, lock_time={lock_time} WHERE id={uid};' \ sql_s = 'UPDATE `{tp}user` SET `state`={ph}, `lock_time`={ph} WHERE `id`={ph};' \
''.format(db.table_prefix, state=TP_STATE_LOCKED, lock_time=tp_timestamp_sec(), uid=user_info.id) ''.format(tp=db.table_prefix, ph=db.place_holder)
sql_list.append(sql) sql_v = (TP_STATE_LOCKED, tp_timestamp_sec(), user_info.id)
sql_list.append({'s': sql_s, 'v': sql_v})
if db.transaction(sql_list): if db.transaction(sql_list):
return TPE_OK, is_locked return TPE_OK, is_locked
@ -698,24 +712,32 @@ def remove_users(handler, users):
sql_list = [] sql_list = []
# 将用户从所在组中移除 # 将用户从所在组中移除
sql = 'DELETE FROM `{tpdp}group_map` WHERE type={t} AND mid IN ({ids});' \ sql_s = 'DELETE FROM `{tp}group_map` WHERE `type`={ph} AND `mid` IN ({ids});' \
''.format(tpdp=db.table_prefix, t=TP_GROUP_USER, ids=str_users) ''.format(tp=db.table_prefix, ph=db.place_holder, ids=str_users)
sql_list.append(sql) sql_v = (TP_GROUP_USER, )
sql_list.append({'s': sql_s, 'v': sql_v})
# 删除用户 # 删除用户
sql = 'DELETE FROM `{tpdp}user` WHERE id IN ({ids});'.format(tpdp=db.table_prefix, ids=str_users) sql_s = 'DELETE FROM `{tp}user` WHERE `id` IN ({ids});'.format(tp=db.table_prefix, ids=str_users)
sql_list.append(sql) sql_list.append({'s': sql_s, 'v': None})
# 将用户从运维授权中移除 # 将用户从运维授权中移除
sql = 'DELETE FROM `{}ops_auz` WHERE rtype={rtype} AND rid IN ({ids});' \ sql_s = 'DELETE FROM `{tp}ops_auz` WHERE `rtype`={rtype} AND `rid` IN ({ids});' \
''.format(db.table_prefix, rtype=TP_USER, ids=str_users) ''.format(tp=db.table_prefix, ph=db.place_holder, ids=str_users)
sql_list.append(sql) sql_v = (TP_USER, )
sql = 'DELETE FROM `{}ops_map` WHERE u_id IN ({ids});'.format(db.table_prefix, ids=str_users) sql_list.append({'s': sql_s, 'v': sql_v})
sql_list.append(sql)
sql_s = 'DELETE FROM `{tp}ops_map` WHERE `u_id` IN ({ids});'.format(tp=db.table_prefix, ids=str_users)
sql_list.append({'s': sql_s, 'v': None})
# 将用户从审计授权中移除 # 将用户从审计授权中移除
sql = 'DELETE FROM `{}audit_auz` WHERE rtype={rtype} AND rid IN ({ids});' \ sql_s = 'DELETE FROM `{tp}audit_auz` WHERE `rtype`={ph} AND `rid` IN ({ids});' \
''.format(db.table_prefix, rtype=TP_USER, ids=str_users) ''.format(tp=db.table_prefix, ph=db.place_holder, ids=str_users)
sql_list.append(sql) sql_v = (TP_USER, )
sql = 'DELETE FROM `{}audit_map` WHERE u_id IN ({ids});'.format(db.table_prefix, ids=str_users) sql_list.append({'s': sql_s, 'v': sql_v})
sql_list.append(sql)
sql_s = 'DELETE FROM `{tp}audit_map` WHERE `u_id` IN ({ids});'.format(tp=db.table_prefix, ids=str_users)
sql_list.append({'s': sql_s, 'v': None})
if not db.transaction(sql_list): if not db.transaction(sql_list):
return TPE_DATABASE return TPE_DATABASE