MySQL学习与遇到的坑

MySQL数据推送表操作

最近之前的项目交维,需要对之前开发的系统进行权限整理以及权限控制,项目之前的需求有一个利用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://csmsyc:csmsyc321@172.21.7.186:3306/tests/test_TT'

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要求的权限下确立下,删除触发器重新创建触发器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值