Chinaunix首页 | 论坛 | 博客
  • 博客访问: 825621
  • 博文数量: 105
  • 博客积分: 636
  • 博客等级: 中士
  • 技术积分: 1704
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-11 10:57
文章分类

全部博文(105)

文章存档

2017年(4)

2016年(9)

2015年(18)

2014年(16)

2013年(34)

2012年(24)

分类: Mysql/postgreSQL

2016-06-16 17:21:15

昨天同事让帮忙在mysql的数据库里创建一个procedure 并给他用的账号reader debug 存储过程的权限。
通过查找相应的资料,并结合mysql.user里面的信息,发现mysql的procedure的权限功能还是挺弱的,
看到有create routine ,alter routine ,execute 这三个权限,没有什么debug的权限。
于是我就先把这三个权限给了reader这个用户,但是结果是可想而知的,创建的procedure是不能够debug的。
后来查找了大量的资料,并通过自己的摸索,成功的解决了这个问题。在百度里相关的资料比较少,所以记录下来希望能帮助到遇到此类问题的朋友们。
1. 同事用的toad for mysql 7.1 这个工具是带有debug的功能的,但是在debug时提示如下
mysql database error: access denied for user reader to database questdebug;
刚开始我不明白这是什么意思,因为我的mysql里没有questdebug这个库,于是我百度,但是没有结果,于是我换了一个工具:dbforge studio for mysql(一下简称dbforge) 版本我忘记了 ,我是从官网下载的最新版本然后安装做的测试。
2.用dbforge 这个工具 也是不能debug ,但是这个工具报的错误是和toad不一样的。
大致的错误信息应该是 access denied for user reader to database cr_debug;
我还是不清楚是怎么个情况,于是我用自己管理员的账号做个个测试,发现是可以debug的。两个用户的权限是不一样的。
这个时候我发现mysql里多了一个cr_debug的库,于是我把cr_debug库的all privileges 给了reader这个用户,然后用dbforge compile for debugging ,居然是成功了。 这时候我感觉 可能是连接工具在对mysql debug时会创建一个库,记录debug的信息。所以需要用户对这个库有权限。
3. 能够编译debug只是个开始,还需要逐行debug ,这个对procedure 编写调试用处非常大。
但是在做step into(逐行调试)的时候 又有了新的错误:
can't start debug.Probably,you do not have enough privileges to get object metadata.
这个错误 我从百度上找不到答案,针对object metadata 我做了些分析。在mysql中 information_schema 存放的是元数据。里面放的表(视图)
记录着mysql的相关信息。 但是这个库默认对用户是有select的权限的。难道是缺其它的权限,于是我想把all privileges的权限给reader ,但是发现报错,提示没有权限。 这个该怎么解决呢。于是查了些资料,对比了下我自己的用户和reader用户,发现可能问题出现在mysql的一个默认的库mysql库,这个库是mysql的核心数据库。这个库记录着mysql自己的控制和管理信息,也算是元数据吧。于是我把 select on mysql.* 的权限给了reader用户。这次大功告成。
4.接下来又遇到一个小问题,就是binlog_format=statement  然后debug的时候有数据需要row-based logging  否则不能写入binlog。这个问题就比较好解决了,
set global binlog_format=mixed 这样就解决了
5 总结:mysql的对debug的控制,是根据某些特定的库来实现权限的构成。使用的工具不同也许遇到的问题也会不同。



阅读(3999) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~