我在使用MySQL存储过程时遇到了一点困难并且有点沮丧。我有一组由Bob创建的SP。因为他是DEFINER,只有他能看到他们的CREATE语句,修改它们等等。
Mary可以在MySQL Workbench的架构中看到Bob的存储过程,但是当她点击SP并选择" Send to SQL Editor - >时,他们无法看到他们做了什么。 CREATE语句"没有任何反应,因为她不是定义者。
来自MS SQL背景,这对我来说有点奇怪。有什么方法可以设置一个组(例如" DB_DEVS")并使这个组成为存储过程的定义者,这样Bob和Mary可以看到彼此的代码吗?
答案 0 :(得分:4)
DEFINER始终引用创建存储过程的用户。这只能是1个用户。
如果Mary希望看到Bobs程序,她可以致电:
SHOW CREATE PROCEDURE proc_name
查看程序的代码。她还可以打电话给以下人员查看代码:
SELECT ROUTINE_DEFINITION FROM information_schema.ROUTINES WHERE SPECIFIC_NAME='proc_name'
以下是如何让Mary通过MySQL-Workbench访问过程视图:
默认情况下,Mary无法将create语句发送到SQL-Editor。但这只是一种特权。 Mary只需要SELECT
表中的基本mysql.proc
权限。为此,请运行以下SQL语句(通过命令行或直接在Workbench中):
GRANT SELECT ON mysql.proc TO 'mary'@'%'
此命令使Mary可以从所有主机访问Create-Statement。如果您想将其限制为特定主机,您可以执行以下操作:
GRANT SELECT ON mysql.proc TO 'mary'@'192.168.2.1'
如果Mary具有SELECT权限,她应该能够在执行Send to SQL Editor -> CREATE statement
注意:要运行GRANT
- 命令,您需要以具有授予权限的权限的用户身份登录(例如root用户)
<强> +++++++++++++++++++++++++ EDIT +++++++++++++++++++++++++ 强>
有一种“快速而肮脏”的方法可以为大量用户实现此目的,而无需为每个用户编写新命令来授予权限: (确保对有权通过Workbench插入行的用户执行此操作)
SELECT * FROM mysql.tables_priv;
并运行创建一个如下所示的CSV文件:
%,mysql,jane,proc,root @ localhost,“2016-02-19 22:51:47”,选择, %,mysql,max,proc,root @ localhost,“2016-02-19 22:51:47”,选择, %,mysql,steve,proc,root @ localhost,“2016-02-19 22:51:47”,选择, %,mysql,greg,proc,root @ localhost,“2016-02-19 22:51:47”,选择, %,mysql,jamie,proc,root @ localhost,“2016-02-19 22:51:47”,选择,
......更多用户
jane,max,steve,...将成为您的用户。将其他列保留原样。
FLUSH PRIVILEGES
(从priv-tables中重新释放权限)