gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:38:27 30 4
gpt4 key购买 nike

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

Mary 可以在 MySQL Workbench 的模式中看到 Bob 的存储过程,但看不到它们的作用 - 当她单击 SP 并选择“发送到 SQL 编辑器 -> CREATE 语句”时,没有任何反应,因为她不是定义器。

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

最佳答案

DEFINER 总是指创建存储过程的用户。这只能是 1 个用户。

如果 Mary 想看 Bob 的手术,她可以打电话:

SHOW CREATE PROCEDURE proc_name

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

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

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

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

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 用户)

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

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

  1. 在您的工作台中打开一个新的 SQL 选项卡
  2. 键入 SELECT * FROM mysql.tables_priv; 并运行
  3. 在结果网格上方应该有一个小按钮,允许您从 csv 文件导入数据。
  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",选择,

    ...更多用户

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

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

关于mysql - 可以让多个用户作为 MySQL 存储过程的 DEFINER 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35511862/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com