我有一个大约一百个存储例程在我的MySQL数据库与其中大多数有'根'作为定义符。我有另一个名为“abc”的mysql帐户,如何将所有例程的定义符更改为“abc”。如果我只能以“abc”用户而不是“root”用户的身份访问MySQL服务器,是否可以执行相同的操作
bvuwiixz1#
要查看定义者:
show procedure status;
您可以按如下方式更改它们:
UPDATE `mysql`.`proc` p SET definer = 'YournewDefiner' WHERE definer='OldDefinerShownBefore'
例如:
UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'
要小心,因为这将更改所有数据库的所有定义器。
5kgi1eie2#
您可以根据所需的表/db更新mysql.proc表中的定义器。
update mysql.proc set definer='root@localhost' where name='t_p';
mbskvtky3#
据我所知:您必须获取所有这些过程的脚本文本,并将它们作为abc删除/重新创建。除非abc具有删除/创建过程的权限,否则您无法作为abc执行此操作。
8gsdolmq4#
导出数据库<DB>的所有过程:
<DB>
mysqldump --single-transaction --no-data --no-create-info --routines \ --skip-triggers <DB> >routines.sql
编辑routines.sql并重新创建它们:
routines.sql
cat routines.sql | mysql <DB>
如有必要,指定-u和-p开关。
-u
-p
mbzjlibv5#
我通过导出数据库对mass Definer进行了更改,在文本编辑器中打开导出的文件(不是字处理器),然后用新的定义器替换旧的定义器。然后,我重命名原始数据库,并使用原始数据库的名称创建新数据库。只需导入修改后的导出文件(包含新的定义器信息),即可完成操作。我喜欢这个解决方案,因为它给了我一个后备,如果事情不顺利,删除您创建的数据库,并重命名副本。
9rygscc16#
我有这个问题终于解决了它使用下面的方法。我得到了这个错误:1449在将数据插入到表中时。解决方案:转到触发器选项必须有一些driggers定义由用户之前,把他们从那里.这是它你得到了解决方案,现在你可以使操作表在phpmydmin
7z5jn7bk7#
而是使用一个简单的方法,创建一个用户(abc),授予用户所有权限,并在连接字符串中连接与abc.将工作得更好,这mysql版本8不支持mysql . proc
mysql
proc
nxagd54h8#
你也可以这样做:更新mysql.proc设置定义符=“root@localhost”,其中db =“mydatabase”;
wswtfjt79#
alter procedure old_proc_name delimiter // create PROCEDURE new_proc_name (parameter) begin Your Sql Statement; end// delimiter ;
9条答案
按热度按时间bvuwiixz1#
要查看定义者:
您可以按如下方式更改它们:
例如:
要小心,因为这将更改所有数据库的所有定义器。
5kgi1eie2#
您可以根据所需的表/db更新mysql.proc表中的定义器。
mbskvtky3#
据我所知:您必须获取所有这些过程的脚本文本,并将它们作为abc删除/重新创建。除非abc具有删除/创建过程的权限,否则您无法作为abc执行此操作。
8gsdolmq4#
导出数据库
<DB>
的所有过程:编辑
routines.sql
并重新创建它们:如有必要,指定
-u
和-p
开关。mbzjlibv5#
我通过导出数据库对mass Definer进行了更改,在文本编辑器中打开导出的文件(不是字处理器),然后用新的定义器替换旧的定义器。然后,我重命名原始数据库,并使用原始数据库的名称创建新数据库。只需导入修改后的导出文件(包含新的定义器信息),即可完成操作。我喜欢这个解决方案,因为它给了我一个后备,如果事情不顺利,删除您创建的数据库,并重命名副本。
9rygscc16#
我有这个问题终于解决了它使用下面的方法。我得到了这个错误:1449在将数据插入到表中时。解决方案:转到触发器选项必须有一些driggers定义由用户之前,把他们从那里.这是它你得到了解决方案,现在你可以使操作表在phpmydmin
7z5jn7bk7#
而是使用一个简单的方法,创建一个用户(abc),授予用户所有权限,并在连接字符串中连接
与abc.将工作得更好,这mysql版本8不支持
mysql
.proc
nxagd54h8#
你也可以这样做:
更新mysql.proc设置定义符=“root@localhost”,其中db =“mydatabase”;
wswtfjt79#