前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ProxySQL “大变语句”

ProxySQL “大变语句”

作者头像
AustinDatabases
发布2019-09-30 11:33:27
7750
发布2019-09-30 11:33:27
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

事情前几天有一个顾问(也可以叫项目经理),在测试库上执行了一条她认为OK 的语句,她的目的是删除表中的数据,而她忘记了测试数据库中的表的量在2千2百万。然后就发生了一些不大让人愿意回忆的事情。MYSQL 的DBER们都懂,并且还KILL 了语句,然后数据库又开始回滚。

为了避免这样的事情发生,以及数据库的安全,想到了PROXYSQL 的SQL 语句重写功能。

1 我没法杜绝不懂MYSQL的人去使用它

2 我也没法事后说点什么,忍受是人生的一种“享受”

如何想辙呗!! 解决的方法就是语句转换,或禁止他

PROXYSQL 的语句转换功能主要是由match + replace 的方式进行的。以下内容需要你懂得PROXYSQL ,如果你还不懂什么是PROXYSQL,可以翻看我之前的文章,应该是几个月前的。

我们来一个实例来说清这个问题

举例我们有一个数据库test 里面有一个表t1 而这个表经常被人select * from t1; 这样操作,说了多少遍了,不能 select * 去操作,还有人select * from t1; 我们就的想法来让他无法做到这样查询。

一般来说如果没有中间件,要想控制用户输入无聊的语句,是很困难的,这里我们下面说用proxysql 来prohibition那些无聊的语句。

我们进入proxysql 并且直接输入如下语句

INSERT INTO mysql_query_rules (rule_id, active, match_pattern, error_msg, apply) VALUES (2,1,'^SELECT \* from t1$','Query not allowed',1);

LOAD MYSQL QUERY RULES TO RUNTIME;

SAVE MYSQL QUERY RULES TO DISK;

然后我们对比一下之前和之后的效果;

这样就杜绝了,某些人士不合时宜的访问数据库的行为,当然如果是危险的操作,我们也可以禁止,例如delete from test.t1; delete from t1; 这样的操作。

我们做下面的操作

INSERT INTO mysql_query_rules (rule_id, active, match_pattern, error_msg, apply) VALUES (3,1,'^DELETE FROM t1$','Query not allowed',1);

LOAD MYSQL QUERY RULES TO RUNTIME;

SAVE MYSQL QUERY RULES TO DISK;

我们可以看到相关的查询,凡是和我们预先设置的都被禁止了,但有漏网之鱼,还是把数据表给删除了。这就需要在设置规则的时候,尽量将一些可以进行同样操作的但不一样的语句都进行规则化。

当然如果强制让客户的语句报错,对于运维可能会产生新的问题,就是会有人投诉。那如果在这样的环境我们可以使用另一种方式,Query Rewrite

这种方式是使用匹配+替换的模式来对语句进行处理,而不是抛出一个错误。

我们在做下面一个测试

INSERT INTO mysql_query_rules (rule_id, active, match_pattern,replace_pattern, apply) VALUES (4,1,'^DELETE FROM t1$','select * from test.t1',1);

还是对原来的Delete 语句进行转换,将DELETE 语句转换为 select 语句。

下面就开始给客户变魔术了。

如果这样来处理某些大表防止误操作是很不错的选择,如果有人问你我命名是delete操作怎么变成了select 操作,那就的去好好盘问他了。

当然 PROXYSQL 的功能还很多,今天speacking的也不够,不过今天到此为止,休息休息一下。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档