首页 > 解决方案 > 为什么 Doctrine SQLite 会忽略身份验证配置?

问题描述

似乎在 SQLite Doctrine 中设置用户名和密码config/packages/doctrine.yaml 不会创建受用户名/密码保护的 sqlite 数据库

doctrine:
    dbal:
        charset:  UTF8
        url: '%DATABASE_URL%'
        user:     'foo'
        password: 'bar'

似乎参数用户名和密码被忽略了?

标签: phpsqlitesymfonydoctrine

解决方案


在 Doctrine 的文档中,您会发现:

对于连接 SQLite 数据库,URL 的权限部分显然是无关紧要的,因此可以省略。URL 的路径部分与所有其他驱动程序一样,去掉了前导斜杠,从而产生数据库的相对文件名:

sqlite:///somedb.sqlite

这将访问当前工作目录中的 somedb.sqlite 并且与以下内容相同:

sqlite://ignored:ignored@ignored:1234/somedb.sqlite

但事实是,sqlite 可能直接忽略了用户名和密码,而不是 Doctrine。

如果你检查Doctrine\DBAL\Driver\PDOSqlite\Driver::connect(),你会发现参数被传递给了 PDO

但是除非你编译你安装的 sqlite 来添加身份验证支持,否则它对用户和密码参数没有任何用处,并且会被愉快地忽略。

对经过身份验证的用户使用 sqlite 很少是一个好主意。如果您的用例需要它们,您可能最好使用传统的数据库服务器。


推荐阅读