是否可能有多个用户作为MySQL存储过程的定义者?
我在MySQL存储过程方面有点挣扎,有点沮丧。我有一组由Bob创建的SP。因为他是定义者,只有他才能看到他们的创建声明、修改声明等 Mary可以在MySQL Workbench的模式中看到Bob的存储过程,但看不到它们的作用-当她单击SP并选择“发送到SQL编辑器->创建语句”时,什么都不会发生,因为她不是定义者是否可能有多个用户作为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可以看到彼此的代码?定义者总是指创建存
来自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'