【问题标题】:CREATE ALGORITHM=UNDEFINED DEFINER创建算法=未定义的定义器
【发布时间】:2013-07-10 03:34:44
【问题描述】:

我从远程服务器备份了一些数据库,当我尝试导入该备份时,我的本地服务器出现问题。我在这一行得到一个错误:

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

两台服务器都有一个 mysql 5.5.2x。并且用户在这两个服务器上是不同的。

【问题讨论】:

    标签: mysql database phpmyadmin


    【解决方案1】:

    我只是尝试:

    CREATE VIEW tematics_field AS select....
    

    一切都很完美,导入也做得很好。

    【讨论】:

      【解决方案2】:

      MySql 错误:#1227 – 访问被拒绝;您需要(至少一个)超级权限才能执行此操作

      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

      【讨论】:

        【解决方案3】:

        您需要将主机名(在这种情况下为通配符)放在单引号中:

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

        【讨论】:

        【解决方案4】:

        我也遇到过类似的事情。代替:

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

        我用 CURRENT_USER() 代替了 DEFINER,它起作用了。

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

        如果在下一次导入中使用它,它应该是可移植的,并且不会被旧凭据绊倒。

        【讨论】:

          【解决方案5】:
           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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-14
            • 1970-01-01
            • 2017-09-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多