【问题标题】:Access denied for 'user'@'localhost''user'@'localhost' 的访问被拒绝
【发布时间】:2019-09-16 03:54:05
【问题描述】:

我正在尝试使用 phalcon 创建模型。但是当我输入phalcon model polls 时,我得到一个错误ERROR: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

我可以使用mysql -p 进入mysql。所以我尝试创建新用户并授予他所有权限,但没有帮助。我也可以使用 root 和密码登录 phpmyadmin。我也尝试在配置文件中将端口指定为 3306,但仍然没有。

我的配置文件:

defined('BASE_PATH') || define('BASE_PATH', getenv('BASE_PATH') ?: realpath(dirname(__FILE__) . '/../..'));
defined('APP_PATH') || define('APP_PATH', BASE_PATH . '/app');

return new \Phalcon\Config([
    'database' => [
        'adapter' => 'Mysql',
        'host' => 'localhost',
        'port' => 3306,
        'username' => 'root',
        'password' => '$Pass1234 ',
        'dbname' => 'poll_db',
        'charset' => 'utf8',
    ],
    'application' => [
        'appDir' => APP_PATH . '/',
        'controllersDir' => APP_PATH . '/controllers/',
        'modelsDir' => APP_PATH . '/models/',
        'migrationsDir' => APP_PATH . '/migrations/',
        'viewsDir' => APP_PATH . '/views/',
        'pluginsDir' => APP_PATH . '/plugins/',
        'libraryDir' => APP_PATH . '/library/',
        'cacheDir' => BASE_PATH . '/cache/',

        // This allows the baseUri to be understand project paths that are not in the root directory
        // of the webpspace.  This will break if the public/index.php entry point is moved or
        // possibly if the web server rewrite rules are changed. This can also be set to a static path.
        'baseUri' => preg_replace('/public([\/\\\\])index.php$/', '', $_SERVER["PHP_SELF"]),
    ]
]);

P.S 我做了所有关于通过mysql -u root -p授予进入mysql的权限的操作

P.P.S 我也做了FLUSH PRIVILEGES 然后重新启动了 mysql,但没有。感谢您以后的帮助。

UPD:我还尝试在 laravel 中创建项目,并进行了迁移,一切正常。我也使用了 root + 密码。

已解决:我不知道为什么,但我决定创建新项目,即使使用 'root'@'localhost' 也一切正常。似乎第一个项目出了点问题。尽管如此,还是感谢所有参与帮助的人。

P.S 我将EternHour's 的答案标记为解决方案,仅供将来可能遇到相同错误的人使用。

【问题讨论】:

  • 如何在 DI 容器中注册你的数据库服务?
  • @NikolaosDimopoulos 我没有做任何事情,比如在 DI 容器中注册服务,我是 phalcon 的新手。
  • 你在 Laravel 中是用 socket 连接 MySQL 服务器还是用 tcp 连接?
  • @KoalaYeung 我不确定,我使用composer create-project创建项目,然后修改.env文件
  • 你的 Laravel 的 .env 文件中有 DB_PORT 吗?

标签: php mysql phalcon


【解决方案1】:

我认为这不是端口问题,请求已到达目的地。通过命令行 (mysql -u root -p) 登录时使用 root@localhost 将起作用,但您不想使用它来连接您的代码。请记住,在建立连接时,您需要明确使用host=localhosthost=127.0.0.1。如果您使用 IP 地址(即使在同一台服务器上),您将被拒绝访问。

[user@localhost ~]# mysql --host=127.0.0.1 --protocol=TCP -u root -p
Enter password:
mysql>
[user@localhost ~]# mysql --host=192.168.1.10 --protocol=TCP -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'hostname' (using password: YES)

以下是我建议采取的步骤:

  1. 创建可用于在脚本中连接的专用用户。
  2. 如果脚本的来源与 MySQL 相同。

    CREATE USER '<user>'@'localhost'
    IDENTIFIED BY 'password';
    GRANT ALL
    ON <database>.*
    TO '<user>'@'localhost';
    
  3. 如果连接总是从同一个地方建立,但与 MySQL 不同,请在命令行上运行以下命令。

    CREATE USER '<user>'@'<IP_address>'
    IDENTIFIED BY 'password';
    GRANT ALL
    ON <database>.*
    TO '<user>'@'<IP_address>';
    
  4. 如果连接来源不同,请运行以下命令。

    CREATE USER '<user>'@'<IP_address>'
    IDENTIFIED BY 'password';
    GRANT ALL
    ON <database>.*
    TO '<user>'@'%';
    

如果您有任何问题,这里是documentation 的链接。

【讨论】:

  • “你不想用它来连接你的代码” ? 没错,但它应该工作
  • 如果 OP 通过 TCP 连接(在他们的代码中),我不相信它会。除非 root 具有 'root'@'%' 特权,但情况似乎并非如此。
  • 我一直认为localhost 的默认设置是(尝试)使用套接字。通常,如果要强制执行 TCP,请使用 127.0.0.1
  • 将测试一些不同的场景。例如,如果他们实际上使用 localhost 来建立可能会起作用的连接。但如果他们使用 IP 地址(127.0.0.1 除外),我认为不会。
  • 不知道为什么,但我创建了新项目,一切都开始正常工作,我创建的所有用户包括根用户。
猜你喜欢
  • 2021-07-11
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 2022-01-20
  • 2012-08-02
  • 2019-04-30
  • 1970-01-01
相关资源
最近更新 更多