可能有多个用户作为MySQL存储过程的DEFINER?

时间:2016-02-19 18:02:21

标签: mysql stored-procedures user-permissions

我在使用MySQL存储过程时遇到了一点困难并且有点沮丧。我有一组由Bob创建的SP。因为他是DEFINER,只有他能看到他们的CREATE语句,修改它们等等。

Mary可以在MySQL Workbench的架构中看到Bob的存储过程,但是当她点击SP并选择" Send to SQL Editor - >时,他们无法看到他们做了什么。 CREATE语句"没有任何反应,因为她不是定义者。

来自MS SQL背景,这对我来说有点奇怪。有什么方法可以设置一个组(例如" DB_DEVS")并使这个组成为存储过程的定义者,这样Bob和Mary可以看到彼此的代码吗?

1 个答案:

答案 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插入行的用户执行此操作)

  1. 在Workbench中打开一个新的SQL-Tab
  2. 输入SELECT * FROM mysql.tables_priv;并运行
  3. 在结果网格上方应该有一个小按钮,允许您从csv-File导入数据。
  4. 创建一个如下所示的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”,选择,

    ......更多用户

  5. jane,max,steve,...将成为您的用户。将其他列保留原样。

    1. 导入您的csv-File
    2. 在SQL窗口中运行FLUSH PRIVILEGES(从priv-tables中重新释放权限)
    3. 完成!您的所有用户现在都可以访问存储过程