是否可能有多个用户作为MySQL存储过程的定义者?

是否可能有多个用户作为MySQL存储过程的定义者?,mysql,stored-procedures,user-permissions,Mysql,Stored Procedures,User Permissions,我在MySQL存储过程方面有点挣扎,有点沮丧。我有一组由Bob创建的SP。因为他是定义者,只有他才能看到他们的创建声明、修改声明等 Mary可以在MySQL Workbench的模式中看到Bob的存储过程,但看不到它们的作用-当她单击SP并选择“发送到SQL编辑器->创建语句”时,什么都不会发生,因为她不是定义者 来自MS SQL的背景对我来说有点奇怪。是否有任何方法可以设置一个组(例如“DB_DEVS”),并使该组成为存储过程的定义者,以便Bob和Mary可以看到彼此的代码?定义者总是指创建存

我在MySQL存储过程方面有点挣扎,有点沮丧。我有一组由Bob创建的SP。因为他是定义者,只有他才能看到他们的创建声明、修改声明等

Mary可以在MySQL Workbench的模式中看到Bob的存储过程,但看不到它们的作用-当她单击SP并选择“发送到SQL编辑器->创建语句”时,什么都不会发生,因为她不是定义者


来自MS SQL的背景对我来说有点奇怪。是否有任何方法可以设置一个组(例如“DB_DEVS”),并使该组成为存储过程的定义者,以便Bob和Mary可以看到彼此的代码?

定义者总是指创建存储过程的用户。这只能是一个用户

如果Mary想看Bobs程序,她可以打电话:

SHOW CREATE PROCEDURE proc_name
查看程序的代码。她也可以打电话给以下人员查看代码:

SELECT ROUTINE_DEFINITION FROM information_schema.ROUTINES WHERE SPECIFIC_NAME='proc_name'
下面介绍如何使Mary能够通过MySQL工作台访问过程视图:

默认情况下,Mary无法将create语句发送到SQL编辑器。但这只是一种特权。Mary只需要在
mysql.proc
表中有一个基本的
SELECT
权限。为此,运行以下SQL语句(通过命令行或直接在工作台中):

此命令使Mary能够从所有主机访问Create语句。如果要将其限制到特定主机,请执行以下操作:

GRANT SELECT ON mysql.proc TO 'mary'@'192.168.2.1'
如果Mary具有SELECT权限,则在执行
Send to SQL Editor->CREATE语句后,她应该能够看到该过程

注意:要运行
GRANT
-命令,您需要以有权授予权限的用户(例如root用户)身份登录

+++++++++++++++++++++++++++++++++EDIT++++++++++++++++++++++++++++

有一种“快速且肮脏”的方法可以为大量用户实现这一点,而无需为每个用户编写新命令来授予特权: (确保对有权通过工作台插入行的用户执行此操作)

  • 在工作台中打开一个新的SQL选项卡
  • 键入
    SELECT*FROM mysql.tables\u priv并运行它
  • 在结果网格上方应该有一个小按钮,允许您从csv文件导入数据
  • 创建如下所示的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”,选择

    …其他用户

  • 简、马克斯、史蒂夫,。。。将是您的用户。让其他列保持原样

  • 导入您的csv文件
  • 在SQL窗口中运行
    FLUSH PRIVILEGES
    (从priv表重新加载特权)
  • 完了!您的所有用户现在都可以访问存储过程

  • 这工作得很好——在MySQL工作台的设计中,提供该选项似乎有点反常,但无法使其工作。似乎要为每个用户添加此权限(在我的例子中是root权限)有点太高了!谢谢你的帮助,非常感谢。@MrAngry:嗯,如果你有大量的用户,而且懒得为每个用户输入这个命令,那么有一种“快速而肮脏”的方法可以更快地实现这一点。看我的编辑…谢谢内特-我有一小部分用户,所以现在可能会手动操作,尽管了解其他信息也很有用。我只是感到惊讶,没有一种更为“稳健”或“官方”的方式来做(无论如何,对我来说)似乎是一个相当标准的要求。谢谢。你救了我一天。我使用workbench作为客户端并创建了一个SP。几天后,我的IP发生了更改,此后我无法使用mysql workbench更改SP,因为SP的define子句中的IP不匹配。现在使用
    将mysql.proc上的SELECT授予“user”@“%
    。现在我可以从mysql工作台客户端打开/读取SP了。
    GRANT SELECT ON mysql.proc TO 'mary'@'192.168.2.1'