mysql5.7沒有密碼登陸數據庫

出於某種業務須要,須要鏈接一個沒有密碼的數據庫。檢查了整個網絡環境並使用wireshark進行簡單的抓包分析,咱們發如今局域網內有兩個網段10開頭的、和192開頭的。
通過分析判斷後數據庫主機存在於 10.0.0.22的主機上。
因爲22主機上的服務正在運行,咱們抓包後發現是 3308端口正在運行,還有一些半加密的sql語句。python

22主機運行的居然是Windows7的環境,這是個天大的好事,咱們使用了PE鏡像幹掉了Windows系統的登陸密碼。
進入到主機後,檢查磁盤發現一個mysqlbar的目錄,裏面的結構和mysql5.7安裝版本很是一致。
我猜想這就是咱們要找的數據庫,找到了命令行以後,經過myql.exe嘗試鏈接後提示密碼錯誤,能夠基本肯定這就是咱們要找的數據庫。mysql

鏈接不上數據庫以後, 咱們終止了數據庫了數據庫服務,企圖經過免驗證模式進入。sql

修改根目錄下的 my-default.ini 再 [mysqld] 節點下 添加一行
skip-grant-tables = 1
修改根目錄下的 my.ini 在 [mysqld] 節點下添加一行
skip-grant-tables數據庫

重啓mysqld.exe發現,root用戶下的 root密碼登陸成功,可是查看數據庫看不到咱們所須要的庫。
再項目正在大功告成的時候,新的問題出現了,原來的數據庫鏈接提示數據庫鏈接異常。安全

接着嘗試插入mysql庫的user表進行新增用戶的提權操做,嘗試一條sql解決問題。網絡

INSERT INTO `user` (`Host`, `User`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`, `password_last_changed`, `password_lifetime`, `account_locked`,`ssl_cipher`,`x509_issuer`,`x509_subject`) VALUES ('%', 'test', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '0', '0', '0', '0', 'mysql_native_password', 'password(\'123\')', 'N', '2018-07-04 00:00:00', NULL, 'N','N','N','N');

後來發現咱們insert的用戶存在着權限問題,沒有讀取一些數據庫的權限,因爲對mysql庫的不熟悉咱們放棄了這個方案。ide

咱們嘗試再安全模式經過password函數修改root密碼,而後新增一個用戶,並提高他的數據庫權限。
update user set authentication_string=password('123') where user='root';
修改了mysql的root密碼,咱們就能夠合法登陸,咱們關閉了mysql安全模式,重啓了myqsld函數

嘗試經過合法登陸fetch

合法登陸這塊在實際執行得時候遇到了mysql默認端口3306被修改成3308的問題,咱們仍是修改了配置文件得mysql端口才得以正常登陸。
登陸成功,加密

經過命令行 CREATE USER'admin'@'%' IDENTIFIED BY '123';
建立新的用戶admin,密碼爲123

grant all privileges on 數據庫名.* to 'admin'@'%' identified by '123';
受權admin用戶對數據庫名的全部操做.

flush privileges;
刷新受權。

附上一個 python嘗試讀取數據庫的代碼。順即可以檢查下咱們受權的權限是否正確。

#-*- coding:utf-8 -*-
import mysql.connector

mysql_config = {'user':'admin',
'password':'123',
'host':'localhost',
'port':'3306',
'database' :'數據庫',
'charset' :'utf8'}
conn = mysql.connector.connect(**mysql_config)

cursor=conn.cursor()
sql = "SHOW DATABASES;"
cursor=conn.cursor()
cursor.execute(sql)
result_set = cursor.fetchall()
print result_set

最後咱們把root密碼重置回來。 update user set authentication_string='*FF1887726154F9E870A6596D469B8C271B8E5BAA' where user='root'; 完事

相關文章
相關標籤/搜索