mysql 更改存储过程定义符

hgc7kmma  于 2023-03-17  发布在  Mysql
关注(0)|答案(9)|浏览(121)

我有一个大约一百个存储例程在我的MySQL数据库与其中大多数有'根'作为定义符。
我有另一个名为“abc”的mysql帐户,如何将所有例程的定义符更改为“abc”。
如果我只能以“abc”用户而不是“root”用户的身份访问MySQL服务器,是否可以执行相同的操作

bvuwiixz

bvuwiixz1#

要查看定义者:

show procedure status;

您可以按如下方式更改它们:

UPDATE `mysql`.`proc` p SET definer = 'YournewDefiner' WHERE definer='OldDefinerShownBefore'

例如:

UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'

要小心,因为这将更改所有数据库的所有定义器。

5kgi1eie

5kgi1eie2#

您可以根据所需的表/db更新mysql.proc表中的定义器。

update mysql.proc set definer='root@localhost' where name='t_p';
mbskvtky

mbskvtky3#

据我所知:您必须获取所有这些过程的脚本文本,并将它们作为abc删除/重新创建。除非abc具有删除/创建过程的权限,否则您无法作为abc执行此操作。

8gsdolmq

8gsdolmq4#

导出数据库<DB>的所有过程:

mysqldump --single-transaction --no-data --no-create-info --routines \
    --skip-triggers <DB> >routines.sql

编辑routines.sql并重新创建它们:

cat routines.sql | mysql <DB>

如有必要,指定-u-p开关。

mbzjlibv

mbzjlibv5#

我通过导出数据库对mass Definer进行了更改,在文本编辑器中打开导出的文件(不是字处理器),然后用新的定义器替换旧的定义器。然后,我重命名原始数据库,并使用原始数据库的名称创建新数据库。只需导入修改后的导出文件(包含新的定义器信息),即可完成操作。我喜欢这个解决方案,因为它给了我一个后备,如果事情不顺利,删除您创建的数据库,并重命名副本。

9rygscc1

9rygscc16#

我有这个问题终于解决了它使用下面的方法。我得到了这个错误:1449在将数据插入到表中时。解决方案:转到触发器选项必须有一些driggers定义由用户之前,把他们从那里.这是它你得到了解决方案,现在你可以使操作表在phpmydmin

7z5jn7bk

7z5jn7bk7#

而是使用一个简单的方法,创建一个用户(abc),授予用户所有权限,并在连接字符串中连接
与abc.将工作得更好,这mysql版本8不支持mysql . proc

nxagd54h

nxagd54h8#

你也可以这样做:
更新mysql.proc设置定义符=“root@localhost”,其中db =“mydatabase”;

wswtfjt7

wswtfjt79#

alter procedure old_proc_name
delimiter //
create PROCEDURE new_proc_name (parameter)
begin
 Your Sql Statement;
end//
delimiter ;

相关问题