日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

获取mysql所有用户权限_python 获取mysql数据库列表以及用户权限

發布時間:2025/3/19 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获取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数据库列表以及用户权限的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。