web-dev-qa-db-ja.com

SQLSTATE [HY000] [1698]ユーザー 'root' @ 'localhost'のアクセスが拒否されました

Ubuntu 16.04をインストールし、その上にWebサーバーをインストールしました。すべてうまくいきますが、データベースにアクセスできません。新しいユーザーを作成してすべての権限を付与しても、データベースを作成できませんPHPでこのエラーが発生します:

SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost'

ターミナルでログインしようとすると動作しますが、PHPとphpmyadminでは動作しません。

PHPコード:

protected $Host = '127.0.0.1';
protected $db = 'dbname';
protected $name = 'root';
protected $pass = 'root';
protected $conn;
private static $settings = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);

public function __construct() {
    try {
        $this->conn = new PDO("mysql:Host=$this->Host;dbname=$this->db", $this->name, $this->pass, self::$settings);
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}
39
lamka02sk

Sudoerにならないと、5.7でrootユーザーを使用できなくなります。これは、単にmysql -u rootを実行することはできず、代わりにSudo mysql -u rootを実行する必要があることを意味します。

また、GUIでrootユーザーを使用している場合(または、コマンドラインアプリケーションでないと思われる場合)は機能しなくなります。動作させるには、必要な特権を持つ新しいユーザーを作成し、代わりにそれを使用する必要があります。

詳細については this answerを参照してください。

84
Andris

これらの手順は、Ubuntu 16.04、Apache 2.4、MariaDB、PDOを使用するいくつかのシステムで機能しました

  1. ルートとしてMYSQLにログインします

    mysql -u root
    
  2. 特権を付与します。新しいユーザーに対して実行:

    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
    FLUSH PRIVILEGES;
    

    Google Cloudインスタンスの更新

    Google Cloud上のMySQLには代替コマンドが必要なようです(バッククォートに注意してください)。

    GRANT ALL PRIVILEGES ON `%`.* TO 'newuser'@'localhost';
    
  3. すべてのアドレスにバインド:

    最も簡単な方法は、/ etc/mysql/mariadb.conf.d/50-server.cnfの行をコメントアウトすることですまたは /etc/mysql/mysql.conf.d/mysqld.cnfファイル、実行しているシステムに応じて:

    #bind-address = 127.0.0.1 
    
  4. mysqlを終了してmysqlを再起動します

    exit
    service mysql restart
    

デフォルトでは、ローカルホストのみにバインドしますが、行をコメント化すると、見つかったすべてのインターフェイスにバインドします。行をコメントアウトすることは、bind-address = *と同等です。

Mysqlサービスのバインディングを確認するには、rootとして実行します。

netstat -tupan | grep mysql
63
leopold

少し遅いかもしれませんが、この答えはインターネットで見ました。同じ問題を抱えている他の人を助けることができます。

$Sudo mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] \q

これで、phpmyadminでrootとしてログインできるはずです。

(見つかった ここ 。)

29
Matematikisto

PhpMyAdminのユーザーを作成するには:

Sudo mysql -p -u root

これで、選択したユーザー名で新しいMySQLユーザーを追加できます。

CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD';

最後に、作成したユーザーにスーパーユーザー権限を付与します。

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' WITH GRANT OPTION;

ご質問については、コメントを残してください

4
rust

MySQLは「localhost」と「127.0.0.1」を区別します。

ユーザーテーブルに127.0.0.1からのルートログインのみを許可するエントリがあるため、 'root' @ 'localhost'が許可されていない可能性があります。

これは、サーバー上の一部のアプリケーションがデータベースに接続できる理由と、データベースに接続するさまざまな方法があるために接続できない理由も説明できます。そして、あなたは現在「localhost」を通してそれを許可していません。

2
adjepatatje

Mysqlとサーバーのユーザーは2種類あります。データベースにユーザーを追加し、これらの資格情報でログインする方法を見てください

0
Autor69

MySQLの新規ユーザーを作成するだけでは、rootは使用しません。セキュリティ上の問題があります

Sudo mysql -p -u root

Root権限でMySQLまたはMariaDBにログインします

CREATE USER 'troy121'@'%' IDENTIFIED BY 'mypassword123';

ログインして新しいユーザーを作成する

GRANT ALL PRIVILEGES ON *.* TO 'magento121121'@'%' WITH GRANT OPTION;

「。」にアクセスする特権を付与します「@」「%」「localhost」だけでなく、任意の場所

exit;

特権テーブルSHOW GRANTS;をご覧になりたい場合は&Enjoy。

0
SUNNETmedia

Mysql Ver 14.14 Distrib 5.7.22では、更新ステートメントは次のようになりました。

update user set authentication_string=password('1111') where user='root';
0
sebastian.roibu