gpt4 book ai didi

MySQL:DEFINER 对过程和函数有什么影响?

转载 作者:可可西里 更新时间:2023-11-01 08:04:22 27 4
gpt4 key购买 nike

我使用 SQLyog 在我正在开发的远程 MySQL 数据库中编写过程和函数。数据库只有一个用户名/密码。它是通过我用 Delphi 编写的前端可执行应用程序访问的,该应用程序由几十个不同的人使用,所有人都使用相同的用户名。

当我使用 SQLYog 编写过程时,例如,

CREATE PROCEDURE age_frequency_count(IN bin_size INT)

无论我喜欢与否,结果过程都会得到定义器,导致

CREATE DEFINER=<the_user_name>@<my_IP_address> PROCEDURE age_frequency_count(IN bin_size INT)

(我认为这是由 MySQL 完成的,而不是由 SQLYog DBMS 完成的。)

通过阅读文档和此处关于 SO 的帖子,我对如何使用定义器来说明执行或更改过程所需的权限以及允许的过程有一个粗略但相当困惑的想法做,但我欢迎一些澄清。

问题

如果我的 IP 地址在定义器中,其他将从不同 IP 地址(尽管使用相同的用户名)登录的人仍可以执行该过程吗?

有人可以澄清定义者在做什么吗?即,来 self 的 IP 地址的连接可以做什么而来自其他 IP 地址的连接不能?

最佳答案

我使用 DEFINER子句创建一个具有强大用户安全权限的存储过程,该用户还拥有 UPDATE , DELETE , SELECT , 和 INSERT对特定数据库表的权限。然后,我只授予 EXECUTE将该存储过程发送给 minon 用户(有些人称其为 www 用户,而不是更强大的 wwwproxy 用户)。

这样minion只能执行指定的存储过程,没有UPDATE , DELETE , SELECT , INSERT ,或对数据库表的其他权限。

我希望这有助于构建 DEFINER 子句背后的想法。用它来将权力任务分开。

你是对的,默认情况下,MySQL 使用当前用户的身份作为 DEFINER创建存储过程时。这个身份可以是前端应用程序的身份(可以这么说),或者,就像我说的,您可以使用具有普通表权限的代理用户。那么应用程序用户将是 minion在存储过程中只有一个权限,EXECUTE .

简而言之,如果默认DEFINER用户不代表前端应用程序使用什么登录数据库,而你想要它,那么你需要用 ALTER 更改存储过程,如果可能的话。

另一方面,更好的想法是使用 minon/proxy 方案。 Internet 上的应用程序用户与存储过程中结束的 IP 无关 DEFINER条款。重要的是您的应用程序从何处登录 MySQL 的 IP。您的应用程序正在与数据库对话,而不是人们计算机上的用户代理。然而,这个概念通常是最初的混淆点。你很好!

希望对您有所帮助。

关于MySQL:DEFINER 对过程和函数有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36888168/

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