获取mysql所有用户权限_python 获取mysql数据库列表以及用户权限
#!/usr/bin/env python#coding: utf-8
importjsonimportpymysqlclassMysql(object):#mysql 端口號,注意:必須是int類型
def __init__(self, host, user, passwd, port, db_name):
self.host=host
self.user=user
self.passwd=passwd
self.port=port
self.db_name=db_namedefselect(self, sql):"""執行sql命令
:param sql: sql語句
:return: 元祖"""
try:
conn=pymysql.connect(
host=self.host,
user=self.user,
passwd=self.passwd,
port=self.port,
database=self.db_name,
charset='utf8',
cursorclass=pymysql.cursors.DictCursor
)
cur= conn.cursor() #創建游標
#conn.cursor()
cur.execute(sql) #執行sql命令
res = cur.fetchall() #獲取執行的返回結果
cur.close()
conn.close()returnresexceptException as e:print(e)returnFalsedefget_all_db(self):"""獲取所有數據庫名
:return: list"""
#排除自帶的數據庫
exclude_list = ["sys", "information_schema", "mysql", "performance_schema"]
sql= "show databases" #顯示所有數據庫
res =self.select(sql)#print(res)
if not res: #判斷結果非空
returnFalse
db_list= [] #數據庫列表
for i inres:
db_name= i['Database']#判斷不在排除列表時
if db_name not inexclude_list:
db_list.append(db_name)#print(db_name)
if notdb_list:returnFalsereturndb_listdefget_user_list(self):"""獲取用戶列表
:return: list"""
#排除自帶的用戶
exclude_list = ["root", "mysql.sys", "mysql.session"]
sql= "select User from mysql.user"res=self.select(sql)#print(res)
if not res: #判斷結果非空
returnFalse
user_list=[]for i inres:
db_name= i['User']#判斷不在排除列表時
if db_name not inexclude_list:
user_list.append(db_name)if notuser_list:returnFalsereturnuser_listdefget_user_power(self):"""獲取用戶權限
:return: {}
{
"test":{ # 用戶名
"read":["db1","db2"], # 只擁有讀取權限的數據庫
"all":["db1","db2"], # 擁有讀寫權限的數據庫
},
...
}"""info_dict= {} #最終結果字典
#獲取用戶列表
user_list =self.get_user_list()if notuser_list:returnFalse#查詢每一個用戶的權限
for user inuser_list:#print("user",user)
sql = "show grants for {}".format(user)
res=self.select(sql)if notres:returnFalsefor i inres:
key= 'Grants for {}@%'.format(user)#print("key",key)
#判斷key值存在時
ifi.get(key):#print(i[key])
#包含ALL或者SELECT時
if "ALL" in i[key] or "SELECT" ini[key]:#print(i[key])
if notinfo_dict.get(user):
info_dict[user]= {"read": [], "all": []}
cut_str= i[key].split() #空格切割
#print(cut_str,len(cut_str))
power = cut_str[1] #權限,比如ALL,SELECT
if len(cut_str) == 6: #判斷切割長度
#去除左邊的`
tmp_str = cut_str[3].lstrip("`")else:
tmp_str= cut_str[4].lstrip("`")#替換字符串
tmp_str = tmp_str.replace('`.*', '')
value= tmp_str.replace('\_', '-')#判斷權限為select 時
if power.lower() == "select":if value not in info_dict[user].get("read"):#只讀列表
info_dict[user]["read"].append(value)else:if value not in info_dict[user].get("all"):#所有權限列表
info_dict[user]["all"].append(value)#print(info_dict)
returninfo_dictif __name__ == '__main__':
host= "192.168.10.10"user= "root"passwd= "123456"port= 3306db_name= "mysql"obj=Mysql(host, user, passwd, port, db_name)
all_db_list=obj.get_all_db()
user_power=obj.get_user_power()print("all_db_list",all_db_list)print("user_power",user_power)
總結
以上是生活随笔為你收集整理的获取mysql所有用户权限_python 获取mysql数据库列表以及用户权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat mysql数据源_Tomc
- 下一篇: java 找不到mysql驱动_java