MySQL學習與遇到的坑

2021-08-30 08:57:09 字數 1790 閱讀 6137

最近之前的專案交維,需要對之前開發的系統進行許可權整理以及許可權控制,專案之前的需求有乙個利用mysql的federated引擎實現資料庫表對映,原理是在本地建立檢視,在通過在遠端的資料庫連線這個檢視。備註:設想是新建使用者用來遠端訪問我們的檢視(新使用者只給查詢許可權),root賬號建立檢視,當時root使用者是允許所有機器連線的,對應的ip訪問許可權是root@』%』(此處將是乙個坑)

1先在本地建立檢視

create view test_tt as 

select

luyou.id as routeid,

luyou.`name` as routename,

dmp_luyoufz.id as routegroupid,

dmp_luyoufz.`name` as routegroupname

from luyou

left join dmp_luyou_luyoufz on luyou.id = dmp_luyou_luyoufz.luyouid

left join dmp_luyoufz on dmp_luyou_luyoufz.luyoufzid = dmp_luyoufz.id

where luyou.ext0 = '1' and luyou.ext4 = '1';

2在遠端資料庫上(需要支援federated)建立表連線此檢視

drop table if exists `test_route`;

create table `test_route` (

`routeid` int(11) default null,

`routename` varchar(255) default null,

`routegroupid` int(11) default null,

`routegroupname` varchar(255) default null

) engine=federated default charset=utf8 connection='mysql:'

隨著專案交維,客戶要求對資料庫的許可權控制,於是去mysql庫中的user表一頓操作,各種使用者都嚴格限制,只允許特定的ip訪問。第二天gg,**被打炸了,所有的遠端推送表均失效,訪問下來都是這個錯

the user specified as a definer ('root'@'%')
去網上度一下給的解釋幾乎一樣,操作也是一樣

grant all privileges on *.* to root@"%" identified by "......";
但是這個是不可能的我要控制root使用者的許可權,一開始還以為root使用者的許可權控制會影響非root使用者的許可權訪問,這個是不影響的。整個下午各種嘗試,終於在下班的想到本機的檢視是不是有問題,做了個測試,發現只要建立的該檢視的許可權發生改變,檢視就會無法訪問。於是研究看檢視的許可權控制可以參照這個。解決方法:可以統一建立mysql檢視使用者的許可權,或者是將已經建立好的檢視的安全性定義由definer設定為invoker。完美的解決了問題,get了新的知識。

幾天後tomcat介面服務也出現了乙個錯誤與上面的檢視相似錯誤,

the user specified as a definer ('root'@'%')
原來介面服務在插入資料時對應的表上繫結了觸發器,該觸發器也是對應這mysql的許可權(當時是root@』%'許可權,所以一樣gg,服務不能使用),解決方法與視**決方法相似,在對應的mysql要求的許可權下確立下,刪除觸發器重新建立觸發器。

mysql遇到的坑

環境 ubuntu16.4 mysql版本5.7.19 1.基本操作 啟動mysql mysql u user p 然後會要求輸入 密碼 重啟 sudo service my 2.使用者無法通過ssh遠端訪問 先用root執行mysql uroot p,啟動mysql 然後再mysql介面下執行gr...

學習Django遇到的坑

1.安裝xadmin,生成資料表一直報錯,不明白!原因 未使用django formtools最新版包,wtf,git上給出的依賴包是1.0版本的啊!2.關於djangorestframwork配置問題 頁面顯示設定 rest framework 3.在修改了models.py後,用python m...

學習SpringBoot遇到的坑

使用管理員許可權啟動cmd,結束占用該埠的程式 搜尋占用8080埠的程式 netstat aon findstr 8080 檢視占用埠的程式資訊,6036為占用埠程式的pid tasklist findstr 6036 結束占用埠的程式 taskkill pid 6036 f org.springf...