はじめに

はじめまして社会人アルバイトのkawashimaです。

MariaDBのローカル開発環境を構築した際にユーザー権限に関するエラーに遭遇したのでその対処方法について記載します。内容は下記の二点です。

  1. インストール直後に初期ユーザーアカウントで接続できない
  2. MySQLクライアントツール(Sequel Ace)からTCP/IPでlocalhost(127.0.0.1)に接続できない

解決策としては「rootユーザーを一度削除して再作成」、「’root’@’127.0.0.1’のユーザを作成」を実施しました。詳細を以下に記載します。

[環境]
– macOS Catalina バージョン10.15.7
– Bundler version 2.1.4
– mysql Ver 15.1 Distrib 10.4.15-MariaDB, for osx10.15 (x86_64) using readline 5.1

インストール直後に初期ユーザーアカウントで接続できない問題への対処

MariaDBのインストールして起動した後、ターミナルから初期ユーザーアカウントで接続できることを確認しようとしたところ下記のエラーが発生しました。

$ mysql -u root 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

これは初期ユーザーアカウントはOSの管理者権限がないと使用できないようになっていることが原因みたいなので、sudoをつけて実行すると接続できるようです。

$ sudo mysql -u root
Password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 511
Server version: 10.4.15-MariaDB-log Homebrew

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

rootユーザーを一度削除して再作成することで、sudoなしで接続できるようになりました。

MariaDB [(none)]> use mysql
Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> drop user 'root'@'localhost';
Query OK, 0 rows affected (0.031 sec)

MariaDB [mysql]> create user 'root'@'localhost';
Query OK, 0 rows affected (0.008 sec)

MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.009 sec)

Sequel Ace等のMySQLクライアントツールからlocalhost接続できない問題への対処

ターミナルでlocalhost接続ができることを確認できたので、SequelAceからTCP/IP接続 (HOST:127.0.0.1, Username:root, Password:空欄)しようとしたところ下記のエラーが発生した。

Unable to connect to host 127.0.0.1, or the request timed out.

Be sure that the address is correct and that you have the necessary privileges, or try increasing the connection timeout (currently 10 seconds).

MySQL said: Lost connection to MySQL server at 'reading initial communication packet', system error: 0

localhost接続する時はオプションなしの場合、UNIXドメインソケットを使用して通信しているみたいなので、オプションでlocalhostのIPアドレスを指定してTCP/IP接続で試してみると、接続できないことが確認できた。

$ mysql -u root -h 127.0.0.1
ERROR 1130 (HY000): Host '127.0.0.1' is not allowed to connect to this MariaDB server

rootユーザーの情報を確認するとHostフィールドがlocalhostのみとなっている。

MariaDB [mysql]> SELECT User, Host FROM mysql.user where User = 'root';
+------+-----------+
| User | Host      |
+------+-----------+
| root | localhost |
+------+-----------+
7 rows in set (0.010 sec)

これだけだとUNIXドメインソケットでの接続しかできないので、Hostフィールドが127.0.0.1のrootユーザーを作成する。

MariaDB [mysql]> create user 'root'@'127.0.0.1';
Query OK, 0 rows affected (0.006 sec)

MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1';Query OK, 0 rows affected (0.004 sec)

MariaDB [mysql]> SELECT User, Host FROM mysql.user where User = 'root';
+------+-----------+
| User | Host      |
+------+-----------+
| root | 127.0.0.1 |
| root | localhost |
+------+-----------+
7 rows in set (0.010 sec)

TCP/IPでもlocalhost接続できるようになった。

$ mysql -u root -h 127.0.0.1
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 516
Server version: 10.4.15-MariaDB-log Homebrew

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

まとめ

  • 初期ユーザーアカウントで接続するにはOSの管理者権限が必要であり、ユーザーを再作成することで解消できる。
  • TCP/IP接続でlocalhost接続する場合はHostフィールドが’127.0.0.1’のユーザーを作成する必要がある。
Pocket