1、mysql数据库地址文件格式

db:test  10.10.10.10  10.10.10.11

db:profile  10.10.10.12:3306   10.10.10.13:3307

2、脚本内容

#!/usr/bin/env python

#_*_coding:utf-8_*_

#user = liuzilong

#email = liuzilong@jiayuan.com

#time = 2019-04-10

import sys,os

import MySQLdb

import re

import time

import logging

#需要排除的db组

db_name_list = ['db:master','db:lvs']

#数据库配置文件列表

file_list = ['/root/cron/db_list.txt','/root/cron/baihe_db_list.txt']

#数据库清理权限备份文件

d_time = time.strftime('%Y%m%d_%H_%M_%S',time.localtime(time.time()))

bk_file = '/home/mysql/bk/priv_%s.txt' % (d_time)

#执行日志记录

# 第一步,创建一个logger

logger = logging.getLogger('priv_delete')

logger.setLevel(logging.DEBUG) # Log等级总开关

# 第二步,创建一个handler,用于写入日志文件

logfile = '/home/mysql/bk/db_priv_delete.log'

fh = logging.FileHandler(logfile)

fh.setLevel(logging.DEBUG) # 输出到file的log等级的开关

# 第三步,定义handler的输出格式

formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")

fh.setFormatter(formatter)

# 第四步,将logger添加到handler里面

logger.addHandler(fh)

#定义清理权限类

class Priv_Delete(object):

#初始化,获取数据库ip和端口

def __init__(self):

ip_port = {}

db_list = []

for file in file_list:

try:

f = open(file,'r')

db_list += f.readlines()

f.close()

except Exception as e:

logger.error("No such file or directory: %s " % (file))

for ip in db_list:

db_name = ip.split()[0]

if db_name not in db_name_list:

for i in range(1,len(ip.split())):

try:

ip_port[ip.split()[i].split(':')[0]] = int(ip.split()[i].split(':')[1])

except Exception as e :

ip_port[ip.split()[i].split(':')[0]] = 3306

self.ip_port = ip_port

#创建数据库连接

def conn_db(self,ip,port):

ret = {}

db_host = ip

db_port = port

db_user = 'sg'

db_passwd = 'sg109504'

db_name = ''

try:

conn = MySQLdb.connect(host=db_host,port=db_port,user=db_user,passwd=db_passwd,db=db_name,charset='utf8',connect_timeout=10)

return conn

except Exception as e:

logger.error("attempt connection database %s faild!" % (ip))

return None

#定义清理权限方法

def priv_delete(self,hostlist):

#打开权限备份文件

bk_f = open(bk_file,'a+')

for k,v in self.ip_port.items():

db_ip = k

db_port = v

logger.info("Current operational database address is %s:%s" % (db_ip,db_port))

conn = self.conn_db(db_ip,db_port)

if conn:

cursor = conn.cursor()

ip_str = '"' + '","'.join(hostlist) + '"'

valid_s = "select user,host from mysql.user where host in (%s);" % (ip_str)

cursor.execute(valid_s)

rs = cursor.fetchall()

if len(rs) > 0:

bk_f.write(db_ip + ':' + str(db_port) + '\n')

cursor.execute("set sql_log_bin=0;")

for host_ip in hostlist:

logger.info('current remove privilege ip is %s' % (host_ip))

get_priv_cmd = 'select user from mysql.user where host="%s" ' % (host_ip)

cursor.execute(get_priv_cmd)

result = cursor.fetchall()

for row in result:

name = row[0]

logger.info('current remove privilege user is %s@%s' % (name,host_ip))

if name:

get_db_version = 'select version();'

cursor.execute(get_db_version)

result = cursor.fetchone()[0]

st_list = []

if result.startswith('5.7'):

get_priv = 'show grants for %s@%s' % (name,host_ip)

get_pwd = "select authentication_string from mysql.user where user='%s' and host='%s'" % (name,host_ip)

cursor.execute(get_pwd)

pwd = cursor.fetchone()[0]

cursor.execute(get_priv)

result = cursor.fetchall()

for row in result:

s = " IDENTIFIED BY PASSWORD %s" % (pwd)

s = row[0] + s

st_list.append(s)

st = ';\n'.join(st_list) + ';\n'

bk_f.write(st)

else:

get_priv = 'show grants for %s@%s' % (name,host_ip)

cursor.execute(get_priv)

result = cursor.fetchall()

for row in result:

st_list.append(row[0])

st = ';\n'.join(st_list) + ';\n'

bk_f.write(st)

try:

#remove_priv_cmd = 'drop user %s@%s ' % (name,host_ip)

#cursor.execute(remove_priv_cmd)

logger.info('current user %s@%s remove privilege complete!' % (name,host_ip))

except Exception as e:

logger.error('current user %s@%s remove privilege faild!' % (name,host_ip))

cursor.close()

else:

cursor.close()

bk_f.close()

def usage(self):

print "Usage:"

print ""

print "删除主机授权"

print ""

print " remove_priv ip "

print ""

print " eg: remove_priv ip 10.10.10.10 10.10.10.11"

if __name__ == "__main__":

privobj = Priv_Delete()

if len(sys.argv) < 2:

privobj.usage()

else:

hostlist = list(sys.argv[1:])

privobj.priv_delete(hostlist)

mysql权限清理_mysql清理用户权限相关推荐

  1. MySQL讲义第 55 讲——用户权限管理之创建和删除用户

    MySQL讲义第 55 讲--用户权限管理之创建和删除用户 文章目录 MySQL讲义第 55 讲--用户权限管理之创建和删除用户 一.创建用户 1.使用 create user 命令创建用户 2.使用 ...

  2. linux能修改用户的权限,linux怎样修改用户权限

    ls -l  查看目录下的文件详细信息 ll 同上 whoami 功能说明:先似乎用户名称. 语 法:whoami [--help][--version] 补充说明:显示自身的用户名称,本指令相当于执 ...

  3. 如何更改mysql的授权信息_Mysql 的用户权限等操作管理与设置(创建、授权、修改、查看)...

    注:请在 MySql 的客户端操作 1.创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; //例 CREATE USER 'us ...

  4. mysql 添加最高权限设置_mysql 添加用户并设置权限

    1.mysql默认安装后,生成一个super-user:root,密码为空,给root用户设置密码的方法很多. (1).mysqladmin -uroot password 'newpassword' ...

  5. mysql 赋权限_MySQL赋予用户权限命令总结

    MySQL用户可用权限 一个新建的MySQL用户没有任何访问权限,这就意味着你不能在MySQL数据库中进行任何操作.你得赋予用户必要的权限.以下是一些可用的权限: ALL: 所有可用的权限 CREAT ...

  6. grant mysql转移_mysql 赋予用户权限 grant命令 (转)

    本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 ...

  7. mysql查询_MySQL查看用户权限的两种方法

    MySQL查看用户权限命令的两方法: 一. 使用MySQL grantsmysql> show grants for username@localhost;实例:mysql> show g ...

  8. mysql修改登录权限设置密码_MySQL修改用户密码及权限限制设置

    使用phpmyadmin来更改Mysql的root密码非常方便,安装配置好phpmyadmin后,首先登陆管理界面,点击右侧修改密码链接,输入你要修改的Mysql的root新密码,最后点击执行即可, ...

  9. mysql 查看权限_MySQL查看用户权限

    在 MySQL 中,可以通过查看 mysql.user 表中的数据记录来查看相应的用户权限,也可以使用 SHOW GRANTS 语句查询用户的权限. mysql 数据库下的 user 表中存储着用户的 ...

  10. mysql权限问题_Mysql 数据库的权限问题

    之前一直对Mysql数据库的权限没太理解 root用户具有最高的权限,也就是超级用户,root用户可以看到数据库中的所有的内容,而其它用户只能对经过root用户授权过的数据库进行操作,如果想在其它用户 ...

最新文章

  1. 克鲁斯卡尔(并查集)hdu 1233
  2. Dapper官方教程翻译8:Dapper方法之QueryMultiple(转)
  3. Flask出现Error code 400, message Bad request syntax异常
  4. 在Windows上构建OpenJDK
  5. 合并两个数组的两种方式的异同
  6. indesign缩放图片被切割_InDesign怎么改变图片的大小
  7. java 中文文件路径乱码 解决方法
  8. ThinkPHP表单信息收集系统
  9. 习惯养成android软件,7款好用的习惯养成与打卡APP推荐
  10. Postman教程-Pre-request Script和Tests脚本的介绍
  11. 「测绘知识」高等级道路竖曲线的精确计算方法
  12. cbrt c语音_cbrt (Numerics) – C 中文开发手册 - Break易站
  13. UE5中置人利用iphone驱动虚拟人面部
  14. 囚徒困境(进化优化算法)
  15. Altium Designer 2020 学习笔记(一)-----原理图及原理图库部分(配动态图操作演示)
  16. 电话销售潜在客户从哪里找 电销行业还值得深入研究吗?
  17. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)
  18. UE4:打包项目前设置
  19. 2021年中国私营工业企业数量及经营情况分析[图]
  20. SD卡detent方法

热门文章

  1. SAP Commerce Cloud,通过 ycommercewebservices OCC APIs 进行结账的一个技术限制
  2. TypeScript 里的 class field
  3. Trial accounts of SAP Cloud Platform do not provide an Identity Authentication tenant
  4. SAP CRM的user status和system status
  5. 如何在Eclipse里方便地进行markdown文件编辑
  6. Spring boot应用如何支持https
  7. jQuery.sap.storage getAccessToken的技术实现
  8. Cannot find source code based button in SE24
  9. 如何deactivate Material delta download
  10. why my filter by titleID does not work