CREATE ALGORITHM=UNDEFINED DEFINER

21
我从远程服务器备份了一些数据库,当我尝试导入这个备份时,在我的本地服务器上出现了问题。在这一行代码中,我遇到了一个错误:CREATE ALGORITHM=UNDEFINED DEFINER=root@% SQL SECURITY DEFINER VIEW tematics_field AS select....
这两个服务器都使用的是mysql 5.5.2x。并且这两个服务器上的用户不同。
8个回答

19

我只是尝试:

CREATE VIEW tematics_field AS select....

一切都运作得很完美,导入也很成功。


17

MySql错误:#1227 - 拒绝访问;您需要(至少其中之一)SUPER权限才能执行此操作。

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY INVOKER VIEW `inventory_stock_1` AS SELECT DISTINCT `legacy_stock_status`.`product_id` AS `product_id`,`legacy_stock_status`.`website_id` AS `website_id`,`legacy_stock_status`.`stock_id` AS `stock_id`,`legacy_stock_status`.`qty` AS `quantity`,`legacy_stock_status`.`stock_status` AS `is_salable`,`product`.`sku` AS `sku` FROM (`cataloginventory_stock_status` `legacy_stock_status` JOIN `decg_catalog_product_entity` `product` ON(`legacy_stock_status`.`product_id` = `product`.`entity_id`)) ;

解决方案:

问题在于你将definer设置为root,而不是当前运行用户,所以你需要SUPER权限。 你可以在RDS中创建一个名为root的用户,并使用root运行命令,或者简单地

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY INVOKER

更改为:

CREATE ALGORITHM=UNDEFINED DEFINER=CURRENT_USER SQL SECURITY INVOKER

阅读有关 CURRENT_USER 的更多内容。最终的 SQL 查询如下:

CREATE ALGORITHM=UNDEFINED DEFINER=CURRENT_USER SQL SECURITY INVOKER VIEW `inventory_stock_1` AS SELECT DISTINCT `legacy_stock_status`.`product_id` AS `product_id`,`legacy_stock_status`.`website_id` AS `website_id`,`legacy_stock_status`.`stock_id` AS `stock_id`,`legacy_stock_status`.`qty` AS `quantity`,`legacy_stock_status`.`stock_status` AS `is_salable`,`product`.`sku` AS `sku` FROM (`cataloginventory_stock_status` `legacy_stock_status` JOIN `decg_catalog_product_entity` `product` ON(`legacy_stock_status`.`product_id` = `product`.`entity_id`)) ;
谢谢。来自:MazziTorch

13

你需要把主机名(或通配符)用单引号括起来:

CREATE ALGORITHM=UNDEFINED DEFINER=root@'%' SQL SECURITY DEFINER VIEW tematics_field AS 
select.....

5
"CREATE ALGORITHM=UNDEFINED DEFINER=root@'%' SQL SECURITY DEFINER VIEW" 和简单的 "CREATE VIEW" 有什么区别? - mrakodol
所有额外的子句都是可选的,您可以在此处了解有关它们的信息:http://dev.mysql.com/doc/refman/5.6/en/create-view.html - Bill Karwin
1
在MySQL中,'%'匹配任何IP地址或主机名,但不包括localhost。localhost使用UNIX套接字而不是TCP/IP。请参见http://dev.mysql.com/doc/refman/5.6/en/account-names.html。 - Bill Karwin

4
我遇到了类似的情况。在此处替换为:

CREATE ALGORITHM=UNDEFINED DEFINER=`cccts_org`@`%` SQL SECURITY DEFINER VIEW

我用CURRENT_USER()替换了DEFINER,这样就可以正常工作了。

CREATE ALGORITHM=UNDEFINED DEFINER=CURRENT_USER() SQL SECURITY DEFINER VIEW

如果在下一次导入中使用它,它应该是可移植的,并且不会因为旧凭据而出现问题。

0

错误信息:

ERROR 1227 (42000) at line XXXX: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

试试这个:

sed -i.bak 's/`root`@`%`/CURRENT_USER/g' /path/to/your.sql

注意: 'root@%' 是定义该视图的用户。 或使用VIM编辑SQL文件:
:%s/`root`@`%`/CURRENT_USER/g

祝你好运!


0
在我的情况下,没有任何变体能帮助我,所以我决定完全删除这部分内容:
“-- 视图 'new_view' 的结构” DROP TABLE IF EXISTS 'new_view'; CREATE ALGORITHM=UNDEFINED DEFINER='root'@'localhost' SQL SECURITY DEFINER VIEW 'new_view' AS SELECT .....; 这完全解决了错误,并且new_view已保存

0

CREATE ALGORITHM=UNDEFINED DEFINER=CURRENT_USER SQL SECURITY INVOKER

创建算法=未定义 定义者=当前用户 SQL安全性调用者


0
 CREATE ALGORITHM=UNDEFINED DEFINER=root@% SQL SECURITY DEFINER VIEW tematics_field AS select.....
Please remove "ALGORITHM=UNDEFINED DEFINER=root@% SQL SECURITY DEFINER" and keep like "CREATE VIEW tematics_field AS select.....
it will work while importing or direct pasting under sql tab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接