可以让多个用户作为 MySQL 存储过程的 DEFINER 吗?

Possible to have multiple users as DEFINER for MySQL Stored Procedure?

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

Mary 可以在 MySQL Workbench 的架构中看到 Bob 的存储过程,但看不到它们的作用 - 当她单击 SP 并选择 "Send to SQL Editor -> CREATE statement" 时没有任何反应, 因为她不是定义者。

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

DEFINER 始终引用创建存储过程的用户。这只能是 1 个用户。

如果玛丽想看鲍勃的手术,她可以打电话:

SHOW CREATE PROCEDURE proc_name

查看程序代码。她还可以调用以下命令查看代码:

SELECT ROUTINE_DEFINITION FROM information_schema.ROUTINES WHERE SPECIFIC_NAME='proc_name'

下面是如何让Mary通过MySQL-Workbench访问程序的视图:

默认情况下,Mary 无法将创建语句发送到 SQL-Editor。但这只是一种特权。 Mary 只需要 mysql.proc table 中的基本 SELECT 权限。为此,运行 以下 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-命令,您需要以有权授予权限的用户身份登录(例如根用户)

++++++++++++++++++++++++++编辑+++++++++++++++++++++++++

有一种 "quick and dirty" 方法可以为大量用户实现此目的,而无需为每个用户编写新命令来授予权限: (确保与有权通过 Workbench 插入行的用户一起执行此操作)

  1. 在 Workbench
  2. 中打开一个新的 SQL-Tab
  3. 键入 SELECT * FROM mysql.tables_priv; 并 运行 它
  4. 结果网格上方应该有一个小按钮,允许您从 csv 文件导入数据。
  5. 创建如下所示的 CSV 文件:

    %,mysql,jane,proc,root@localhost,"2016-02-19 22:51:47",Select, %,mysql,max,proc,root@localhost,"2016-02-19 22:51:47",Select, %,mysql,steve,proc,root@localhost,"2016-02-19 22:51:47",Select, %,mysql,greg,proc,root@localhost,"2016-02-19 22:51:47",Select, %,mysql,jamie,proc,root@localhost,"2016-02-19 22:51:47",Select,

    ...更多用户

jane、max、steve... 将是您的用户。保持其他列不变。

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