【问题标题】:Doctrine (with Symfony2) only tries connection to DB using root@localhostDoctrine(使用 Symfony2)仅尝试使用 root@localhost 连接到数据库
【发布时间】:2023-03-24 14:55:01
【问题描述】:

错误:(发生在 prod 环境中)

request.CRITICAL: PDOException: SQLSTATE[28000] [1045] 用户 'root'@'localhost' 的访问被拒绝(使用密码:YES)(未捕获的异常)在 /srv/inta/current/vendor/教义-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php 第 36 行 [] []

到目前为止我已经尝试过什么

奇怪的是,我实际上可以使用 root 用户和提供的密码进行访问。通过控制台以 root 身份登录效果很好。

我正在使用位于 app/config/

中的以下 parameters.yml 文件
parameters:
    database_driver:   pdo_mysql
    database_host:     localhost
    database_port:     ~
    database_name:     int_apartments
    database_user:     root
    database_password: pw goes here

    mailer_transport:  smtp
    mailer_host:       localhost
    mailer_user:       ~
    mailer_password:   ~

    locale:            en
    secret:            ThisTokenIsNotSoSecretChangeIt

如您所见,它非常标准,仅更改了数据库的名称、用户和密码。

在我的 config.yml 中位于 app/config(相关部分)

imports:
- { resource: security.yml }
- { resource: parameters.yml }

...

doctrine:
   dbal:
      driver:   %database_driver%
      host:     %database_host%
      port:     %database_port%
      dbname:   %database_name%
      user:     %database_user%
      password: %database_password%
      charset:  UTF8
      dbname:   int_apartments

  orm:
      auto_generate_proxy_classes: %kernel.debug%
      auto_mapping: true
      mappings:
          StofDoctrineExtensionsBundle: false

现在,我想从“第 1 步”开始并验证 parameters.yml 文件是否实际被导入,因此我将主机更改为“localhos”或将用户更改为“tom”或其他任何内容,并找到错误消息app/logs/prod.log 中的内容保持原样 - 位置不变,用户不变。

所以我检查了位于 app/config

中的 config_prod.yml
imports:
- { resource: config.yml }


#doctrine:
#    metadata_cache_driver: apc
#    result_cache_driver: apc
#    query_cache_driver: apc

monolog:
    handlers:
        main:
            type:         fingers_crossed
            action_level: error
            handler:      nested
        nested:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: debug

...一切看起来都很标准!

总结

所以这里是快速版本。

  • root@localhost 存在身份验证错误
  • 通过控制台以该用户身份登录验证了我的身份验证信用
  • 想检查parameters.yml文件是否正在加载
  • 更改了一些值 - 没有影响错误消息

(小)编辑: 我真正想做的是以完全不同的用户使用不同的密码连接到数据库。即使我在 parameters.yml 文件中输入不同的凭据,教义仍然会吐出“root@localhost”错误。

想法?

【问题讨论】:

  • 您的密码中是否包含特殊字符?
  • 密码目前只有A-z 0-9

标签: authentication symfony doctrine-orm localhost root


【解决方案1】:

愚蠢的错误,似乎是由于服务器上的用户/组/所有者配置错误。

app/cache 目录归“root”所有,但是当我运行时 应用程序/控制台缓存:清除 --env=prod --no-debug 我以另一个用户(不是root)身份运行。因此在清除缓存时出现了问题,并且学说似乎一直在使用位于缓存文件中的非常旧的配置。

经验教训:

  • 始终尝试以 root 身份运行(作为最后的手段)
  • 使用正确配置的 Web 服务器来避免所有权问题

【讨论】:

  • 是的!请缓存:清除!该学说将凭据缓存在某处。我尝试了很多东西,这个简单的修复就做到了。谢谢!
【解决方案2】:

我通过重命名我上传到 prod_old 的 prod 文件夹解决了我的问题,因为系统由于某种原因无法删除该文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多