【问题标题】:Access denied error on select into outfile using Zend使用 Zend 选择到 outfile 时访问被拒绝错误
【发布时间】:2011-01-27 19:03:06
【问题描述】:

我正在尝试在服务器上转储 MySQL 表,并且我正在尝试在 Zend 中执行此操作。我的所有表连接都有一个模型/映射器/dbtable 结构,并且我将以下代码添加到映射器:

public function dumpTable()
{
    $db = $this->getDbTable()->getAdapter();
    $name = $this->getDbTable()->info('name');
    $backupFile = APPLICATION_PATH . 
                  '/backup/' . date('U') .
                  '_' . $name . '.sql'; 
    $query = "SELECT * INTO OUTFILE '$backupFile' FROM $name";
    $db->query( $query );               
}

我想这应该很有效,但是

Message: Mysqli prepare error: Access denied for user 'someUser'@'localhost' (using password: YES) 

这就是结果。

我检查了 someUser 的用户权限,他拥有相关数据库和表的所有权限。我一直在这里和网上四处寻找,通常为用户打开“所有”权利似乎是解决方案,但在我的情况下不是(除非我现在用疲倦的眼睛忽略了某些东西+我不想在我的生产服务器上打开“全部”)。

我在这里做错了什么?或者,有人知道在 Zend 中完成这项工作的更优雅的方法吗?

【问题讨论】:

    标签: mysql sql zend-framework zend-db-table into-outfile


    【解决方案1】:

    虽然我为相关用户提供了“所有权限”,但我是基于每个数据库而不是全局执行此操作的。但是使用outfile需要的权限是FILE,只能设置为GLOBAL权限

    【讨论】:

      【解决方案2】:

      如果您遇到权限问题,您需要设置运行 mysql 的用户,以获得访问该文件夹所需的必要权限。比如你有/tmp/filedumps,拥有www-data的所有者和www-data的组,你需要在debian/ubuntu上将mysql用户帐户添加到组你可以usermod -a -G www-data mysql

      这就是我在 *nix 盒子上解决问题的方法。

      【讨论】:

        【解决方案3】:

        正常的 SELECT 是否有效?如果不是,我会说这是一个简单的密码错误案例。如果正常的 SELECT 有效,请确保您将 OUTFILE 权限授予确切的用户

         'someUser'@'localhost'
        

        不是举例

          'someUser'@'%'
        

        如果我没记错的话,这两个帐户会被区别对待,并且有不同的权限设置。

        【讨论】:

        • 嘿 Pekka,是的,SELECT、INSERT、UPDATE 等工作正常,根据 phpmyadmin,someUser 有“所有权限”
        • @Peter 奇怪。完成FLUSH PRIVILEGES 和/或重新启动服务器?
        • @Peter 你可以尝试创建一个具有所有权限的第二个用户并尝试使用那个用户,只是为了排除重复记录等?
        • @Pekka,尝试了你的建议(刷新和具有所有权限的新用户),仍然得到相同的访问被拒绝错误
        • @Peter 很奇怪,那我就不知道了。您在要将输出文件写入的目录中是否具有适当的写入权限?
        【解决方案4】:
        >$ echo "select count(predicate),subject from TableA group by subject"  | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt
        

        从这篇文章中得到了一个解决方法,即未授予 FILE 权限: Query output to a file gives access denied error

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-24
          相关资源
          最近更新 更多