拒绝访问“用户” @“ localhost”

时间:2019-09-16 03:54:05

标签: php mysql phalcon

我正在尝试使用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'也可以正常工作。似乎第一个项目有问题。即便如此,也感谢所有参与帮助的人。

我将EternHour's答案标记为解决方案,仅适用于将来可能会遇到相同错误的人。

1 个答案:

答案 0 :(得分:1)

我不认为这是端口问题,请求已到达目的地。通过命令行(root@localhost登录时,可以使用mysql -u root -p,但是您不想将其用于连接代码。请记住,建立连接时,需要显式使用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的链接。