1. 程式人生 > >MySQL學習與遇到的坑

MySQL學習與遇到的坑

MySQL資料推送表操作

最近之前的專案交維,需要對之前開發的系統進行許可權整理以及許可權控制,專案之前的需求有一個利用MySQL的federated引擎實現資料庫表對映,原理是在本地建立檢視,在通過在遠端的資料庫連線這個檢視。備註:設想是新建使用者用來遠端訪問我們的檢視(新使用者只給查詢許可權),root賬號建立檢視,當時root使用者是允許所有機器連線的,對應的ip訪問許可權是[email protected]’%’(此處將是一個坑) 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://csmsyc:
[email protected]
:3306/tests/test_TT'

mysql使用者的許可權發生變化

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

The user specified as a definer ('root'@'%') 

去網上度一下給的解釋幾乎一樣,操作也是一樣

grant all privileges on *.* to [email protected]"%" identified by ".";

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