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();
}
}
Sudoerにならないと、5.7でroot
ユーザーを使用できなくなります。これは、単にmysql -u root
を実行することはできず、代わりにSudo mysql -u root
を実行する必要があることを意味します。
また、GUIでroot
ユーザーを使用している場合(または、コマンドラインアプリケーションでないと思われる場合)は機能しなくなります。動作させるには、必要な特権を持つ新しいユーザーを作成し、代わりにそれを使用する必要があります。
詳細については this answerを参照してください。
これらの手順は、Ubuntu 16.04、Apache 2.4、MariaDB、PDOを使用するいくつかのシステムで機能しました
ルートとしてMYSQLにログインします
mysql -u root
特権を付与します。新しいユーザーに対して実行:
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';
すべてのアドレスにバインド:
最も簡単な方法は、/ etc/mysql/mariadb.conf.d/50-server.cnfの行をコメントアウトすることですまたは /etc/mysql/mysql.conf.d/mysqld.cnfファイル、実行しているシステムに応じて:
#bind-address = 127.0.0.1
mysqlを終了してmysqlを再起動します
exit
service mysql restart
デフォルトでは、ローカルホストのみにバインドしますが、行をコメント化すると、見つかったすべてのインターフェイスにバインドします。行をコメントアウトすることは、bind-address = *と同等です。
Mysqlサービスのバインディングを確認するには、rootとして実行します。
netstat -tupan | grep mysql
少し遅いかもしれませんが、この答えはインターネットで見ました。同じ問題を抱えている他の人を助けることができます。
$Sudo mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] \q
これで、phpmyadminでrootとしてログインできるはずです。
(見つかった ここ 。)
PhpMyAdminのユーザーを作成するには:
Sudo mysql -p -u root
これで、選択したユーザー名で新しいMySQLユーザーを追加できます。
CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD';
最後に、作成したユーザーにスーパーユーザー権限を付与します。
GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' WITH GRANT OPTION;
ご質問については、コメントを残してください
MySQLは「localhost」と「127.0.0.1」を区別します。
ユーザーテーブルに127.0.0.1からのルートログインのみを許可するエントリがあるため、 'root' @ 'localhost'が許可されていない可能性があります。
これは、サーバー上の一部のアプリケーションがデータベースに接続できる理由と、データベースに接続するさまざまな方法があるために接続できない理由も説明できます。そして、あなたは現在「localhost」を通してそれを許可していません。
Mysqlとサーバーのユーザーは2種類あります。データベースにユーザーを追加し、これらの資格情報でログインする方法を見てください
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。
Mysql Ver 14.14 Distrib 5.7.22では、更新ステートメントは次のようになりました。
update user set authentication_string=password('1111') where user='root';