可以让多个用户作为 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 插入行的用户一起执行此操作)
- 在 Workbench
中打开一个新的 SQL-Tab
- 键入
SELECT * FROM mysql.tables_priv;
并 运行 它
- 结果网格上方应该有一个小按钮,允许您从 csv 文件导入数据。
创建如下所示的 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... 将是您的用户。保持其他列不变。
- 导入您的 csv 文件
- 运行
FLUSH PRIVILEGES
在 SQL-Window 中(从 priv-tables 重新加载权限)
- 完成!您的所有用户现在都可以访问存储过程
我在使用 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 插入行的用户一起执行此操作)
- 在 Workbench 中打开一个新的 SQL-Tab
- 键入
SELECT * FROM mysql.tables_priv;
并 运行 它 - 结果网格上方应该有一个小按钮,允许您从 csv 文件导入数据。
创建如下所示的 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... 将是您的用户。保持其他列不变。
- 导入您的 csv 文件
- 运行
FLUSH PRIVILEGES
在 SQL-Window 中(从 priv-tables 重新加载权限) - 完成!您的所有用户现在都可以访问存储过程