MySQL shell/client:只读访问权限,还是"安全历史记录"选项?

Jim*_*nis 5 mysql workflow mysql-management

昨天我正在研究一个shell脚本,以便对MySQL数据库执行一些中等复杂的表插入.当然,我mysql打开了一个客户端shell窗口,用于运行describe命令,示例查询以及在测试周期之间删除测试行.

是的,这是一个实时的生产数据库.

在我完成编码的时候,我要求一位同事在运行脚本来处理批处理条目之前查看我的工作.我们讨论了所有事情,他同意他看起来是正确的,我解雇了剧本.没问题.

然后我回到我的实时shell,从历史中拉出一行,更改了where子句以查看生成的插入,然后按[Enter] ...

...不幸的是,我没有看过我正在编辑的整个命令!这是一个delete声明,而不是一个select.

糟糕!

好的,所以我知道我可以设置一个不同的DBMS服务器,将这个数据库的转储恢复到那个并完成我的所有测试.我们都知道,这本来会更安全,更有纪律.我们都知道,有时在现场商店工作更为便利.(在这种情况下,风险比您预期的要低一些......有问题的数据库用于批处理,我们能够从10分钟内只有20分钟的备份恢复delete).

但是,这会让人想到一个问题:mysql客户端shell 是否有一些选项(或某些补丁)只读它?是否有一些选项可以修改它在交互历史记录中存储的内容?(某些东西会标记delete并且drop table类似地"危险"声明为"在重新执行之前提示验证?" mysql客户端是否具有与该bash HISTIGNORE功能类似的内容?

什么是更安全的方式来完成这种工作(缺少完全独立的数据库开发副本)?

Luk*_*ský 5

如果您想要完全只读访问权限,请创建一个没有任何写入权限的用户帐户.

或者只是习惯于在交易中工作.:) BEGIN当你打开shell时键入,并且只COMMIT在你真正想要的时候输入.


Dar*_*con 5

--safe-更新选项,让你有一部分的方式。

最好的方法是为只读访问创建一个新用户并且只允许 SELECT。例如:


    GRANT SELECT ON *.* TO readonly@'%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)