增加读写功能

pull/149/head
midoks 3 years ago
parent 16d00013fa
commit 180c6ce286
  1. 84
      plugins/mysql/index.py
  2. 63
      plugins/mysql/js/mysql.js

@ -888,7 +888,7 @@ def getDbList():
condition = ''
if not search == '':
condition = "name like '%" + search + "%'"
field = 'id,pid,name,username,password,accept,ps,addtime'
field = 'id,pid,name,username,password,accept,rw,ps,addtime'
clist = conn.where(condition, ()).field(
field).limit(limit).order('id desc').select()
@ -1013,7 +1013,7 @@ def syncToDatabases():
return mw.returnJson(True, msg)
def setRootPwd():
def setRootPwd(version=''):
args = getArgs()
data = checkArgs(args, ['password'])
if not data[0]:
@ -1027,8 +1027,7 @@ def setRootPwd():
if isError != None:
return isError
m_version = mw.readFile(getServerDir() + '/version.pl')
if m_version.find('5.7') == 0 or m_version.find('8.0') == 0:
if version.find('5.7') > -1 or version.find('8.0') > -1:
pdb.execute(
"UPDATE mysql.user SET authentication_string='' WHERE user='root'")
pdb.execute(
@ -1045,7 +1044,7 @@ def setRootPwd():
return mw.returnJson(False, '修改错误:' + str(ex))
def setUserPwd():
def setUserPwd(version=''):
args = getArgs()
data = checkArgs(args, ['password', 'name'])
if not data[0]:
@ -1059,27 +1058,28 @@ def setUserPwd():
psdb = pSqliteDb('databases')
name = psdb.where('id=?', (uid,)).getField('name')
m_version = mw.readFile(getServerDir() + '/version.pl')
if m_version.find('5.7') == 0 or m_version.find('8.0') == 0:
if version.find('5.7') > -1 or version.find('8.0') > -1:
accept = pdb.query(
"select Host from mysql.user where User='" + name + "' AND Host!='localhost'")
pdb.execute(
t1 = pdb.execute(
"update mysql.user set authentication_string='' where User='" + username + "'")
# print(t1)
result = pdb.execute(
"ALTER USER `%s`@`localhost` IDENTIFIED BY '%s'" % (username, newpassword))
# print(result)
for my_host in accept:
pdb.execute("ALTER USER `%s`@`%s` IDENTIFIED BY '%s'" % (
t2 = pdb.execute("ALTER USER `%s`@`%s` IDENTIFIED BY '%s'" % (
username, my_host["Host"], newpassword))
# print(t2)
else:
result = pdb.execute("update mysql.user set Password=password('" +
newpassword + "') where User='" + username + "'")
pdb.execute("flush privileges")
psdb.where("id=?", (id,)).setField('password', newpassword)
psdb.where("id=?", (uid,)).setField('password', newpassword)
return mw.returnJson(True, mw.getInfo('修改数据库[{1}]密码成功!', (name,)))
except Exception as ex:
print(str(ex))
return mw.returnJson(False, mw.getInfo('修改数据库[{1}]密码失败!', (name,)))
return mw.returnJson(False, mw.getInfo('修改数据库[{1}]密码失败[{2}]!', (name, str(ex),)))
def setDbPs():
@ -1215,19 +1215,6 @@ def getDbAccess():
return mw.returnJson(True, userStr)
def toSize(size):
d = ('b', 'KB', 'MB', 'GB', 'TB')
s = d[0]
for b in d:
if size < 1024:
return str(size) + ' ' + b
size = size / 1024
s = b
_size = round(size, 2)
# print(size, _size)
return str(size) + ' ' + b
def setDbAccess():
args = getArgs()
data = checkArgs(args, ['username', 'access'])
@ -1258,6 +1245,47 @@ def setDbAccess():
return mw.returnJson(True, '设置成功!')
def setDbRw(version=''):
args = getArgs()
data = checkArgs(args, ['username', 'id', 'rw'])
if not data[0]:
return data[1]
username = args['username']
uid = args['id']
rw = args['rw']
pdb = pMysqlDb()
psdb = pSqliteDb('databases')
dbname = psdb.where("id=?", (uid,)).getField('name')
users = pdb.query(
"select Host from mysql.user where User='" + username + "'")
# show grants for demo@"127.0.0.1";
for x in users:
# REVOKE ALL PRIVILEGES ON `imail`.* FROM 'imail'@'127.0.0.1';
sql = "REVOKE ALL PRIVILEGES ON `" + dbname + \
"`.* FROM '" + username + "'@'" + x["Host"] + "';"
r = pdb.query(sql)
# print(sql, r)
if rw == 'rw':
sql = "GRANT SELECT, INSERT, UPDATE, DELETE ON " + dbname + ".* TO " + \
username + "@'" + x["Host"] + "'"
elif rw == 'r':
sql = "GRANT SELECT ON " + dbname + ".* TO " + \
username + "@'" + x["Host"] + "'"
else:
sql = "GRANT all privileges ON " + dbname + ".* TO " + \
username + "@'" + x["Host"] + "'"
pdb.execute(sql)
pdb.execute("flush privileges")
r = psdb.where("id=?", (uid,)).setField('rw', rw)
# print(r)
return mw.returnJson(True, '设置成功!')
def getDbInfo():
args = getArgs()
data = checkArgs(args, ['name'])
@ -2373,13 +2401,15 @@ if __name__ == "__main__":
elif func == 'sync_to_databases':
print(syncToDatabases())
elif func == 'set_root_pwd':
print(setRootPwd())
print(setRootPwd(version))
elif func == 'set_user_pwd':
print(setUserPwd())
print(setUserPwd(version))
elif func == 'get_db_access':
print(getDbAccess())
elif func == 'set_db_access':
print(setDbAccess())
elif func == 'get_db_rw':
print(setDbRw(version))
elif func == 'set_db_ps':
print(setDbPs())
elif func == 'get_db_info':

@ -526,6 +526,17 @@ function checkSelect(){
},5)
}
function setDbRw(id,username,val){
myPost('get_db_rw',{id:id,username:username,rw:val}, function(data){
var rdata = $.parseJSON(data.data);
// layer.msg(rdata.msg,{icon:rdata.status ? 1 : 5,shade: [0.3, '#000']});
showMsg(rdata.msg, function(){
dbList();
},{icon:rdata.status ? 1 : 5,shade: [0.3, '#000']}, 2000);
});
}
function setDbAccess(username){
myPost('get_db_access','username='+username, function(data){
var rdata = $.parseJSON(data.data);
@ -607,13 +618,13 @@ function setDbPass(id, username, password){
var index = layer.open({
type: 1,
skin: 'demo-class',
area: '500px',
title: '修改数据库密码',
closeBtn: 1,
shift: 5,
shadeClose: true,
content: "<form class='bt-form pd20 pb70' id='mod_pwd'>\
btn:["提交","关闭"],
content: "<form class='bt-form pd20' id='mod_pwd'>\
<div class='line'>\
<span class='tname'>用户名</span>\
<div class='info-r'><input readonly='readonly' name=\"name\" class='bt-input-text mr5' type='text' style='width:330px;outline:none;' value='"+username+"' /></div>\
@ -623,26 +634,17 @@ function setDbPass(id, username, password){
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+password+"' /><span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span></div>\
</div>\
<input type='hidden' name='id' value='"+id+"'>\
<div class='bt-form-submit-btn'>\
<button id='my_mod_close' type='button' class='btn btn-danger btn-sm btn-title'>关闭</button>\
<button id='my_mod_save' type='button' class='btn btn-success btn-sm btn-title'>提交</button>\
</div>\
</form>",
});
$('#my_mod_close').click(function(){
$('.layui-layer-close1').click();
});
$('#my_mod_save').click(function(){
var data = $("#mod_pwd").serialize();
myPost('set_user_pwd', data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
dbList();
$('.layui-layer-close1').click();
},{icon: rdata.status ? 1 : 2});
});
yes:function(index){
var data = $("#mod_pwd").serialize();
myPost('set_user_pwd', data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
layer.close(index);
dbList();
},{icon: rdata.status ? 1 : 2});
});
}
});
}
@ -957,9 +959,28 @@ function dbList(page, search){
list += '<a href="javascript:;" class="btlink" class="btlink" onclick="setBackup(\''+rdata.data[i]['name']+'\',this)" title="数据库备份">'+(rdata.data[i]['is_backup']?'备份':'未备份') +'</a> | ';
var rw = '';
var rw_change = 'all';
if (typeof(rdata.data[i]['rw'])!='undefined'){
var rw_val = '读写';
if (rdata.data[i]['rw'] == 'all'){
rw_val = "所有";
rw_change = 'rw';
} else if (rdata.data[i]['rw'] == 'rw'){
rw_val = "读写";
rw_change = 'r';
} else if (rdata.data[i]['rw'] == 'r'){
rw_val = "只读";
rw_change = 'all';
}
rw = '<a href="javascript:;" class="btlink" onclick="setDbRw(\''+rdata.data[i]['id']+'\',\''+rdata.data[i]['name']+'\',\''+rw_change+'\')" title="设置读写">'+rw_val+'</a> | ';
}
list += '<a href="javascript:;" class="btlink" onclick="openPhpmyadmin(\''+rdata.data[i]['name']+'\',\''+rdata.data[i]['username']+'\',\''+rdata.data[i]['password']+'\')" title="数据库管理">管理</a> | ' +
'<a href="javascript:;" class="btlink" onclick="repTools(\''+rdata.data[i]['name']+'\')" title="MySQL优化修复工具">工具</a> | ' +
'<a href="javascript:;" class="btlink" onclick="setDbAccess(\''+rdata.data[i]['username']+'\')" title="设置数据库权限">权限</a> | ' +
rw +
'<a href="javascript:;" class="btlink" onclick="setDbPass('+rdata.data[i]['id']+',\''+ rdata.data[i]['username'] +'\',\'' + rdata.data[i]['password'] + '\')">改密</a> | ' +
'<a href="javascript:;" class="btlink" onclick="delDb(\''+rdata.data[i]['id']+'\',\''+rdata.data[i]['name']+'\')" title="删除数据库">删除</a>' +
'</td>';

Loading…
Cancel
Save