78155
OS: CentOS  
DB: MariaDB

サーバーのコンソールから`mysql`と入力するだけで、MySQL (MariaDB) にログインできてしまいます。

`mysql -u root -p` のようにユーザー名とパスワードの入力をしないと、ログインできないようにしたいです。

* * *
```

    MariaDB [(none)]> set password = password('aaaaaaaa');
    MariaDB [(none)]> select user, host, password from mysql.user;
    +-------------+-----------+-------------------------------------------+
    | User        | Host      | Password                                  |
    +-------------+-----------+-------------------------------------------+
    | mariadb.sys | localhost |                                           |
    | root        | localhost | *30F3C7028E075C74CDDCBA2FBA415FCE0306793E |
    | mysql       | localhost | invalid                                   |
    +-------------+-----------+-------------------------------------------+
    3 rows in set (0.001 sec)
    
```

`FLUSH PRIVILEGES;` を実行しても `systemctl restart mysql` で MySQL
のサービスを再起動しても状況は変わらずです。

```

    MariaDB [(none)]> status
    --------------
    mysql  Ver 15.1 Distrib 10.6.3-MariaDB, for Linux (x86_64) using readline 5.1
    
    Connection id:          6
    Current database:
    Current user:           root@localhost
    SSL:                    Not in use
    Current pager:          stdout
    Using outfile:          ''
    Using delimiter:        ;
    Server:                 MariaDB
    Server version:         10.6.3-MariaDB MariaDB Server
    Protocol version:       10
    Connection:             Localhost via UNIX socket
    Server characterset:    latin1
    Db     characterset:    latin1
    Client characterset:    utf8mb3
    Conn.  characterset:    utf8mb3
    UNIX socket:            /var/lib/mysql/mysql.sock
    Uptime:                 1 min 40 sec
    
```

`-u`と`-p`オプションなしの`mysql`コマンドだけでログインし、`status`で確認したとき、`Current
user`は`root@localhost`となっています。

また、`mysql -u root
-p`でログインするとき、パスワードを空欄にしたり、パスワードにでたらめな文字列を入力した場合でもエラーとならずにログインできてしまいます。

CentOS側のユーザーが`root`のときにこの現象が発生します。

CentOS側のユーザーを`taro`のような一般ユーザーに切り替えた場合、`mysql`でログインしようとすると`ERROR 1698 (28000):
Access denied for user 'taro'@'localhost'`のような表示になります。

MySQLへのログインで、ユーザー名とパスワードの入力を必須にするにはどうすればいいでしょうか？
CC BY-SA 4.0
2021-07-13T08:11:05.617
78148
2021-07-14T00:22:40.577
2021-07-14T00:22:40.577
3060
45540
question
mysql centos mariadb
MySQLにパスワード無しでログインできてしまうのはなぜ？
# 回答

次の方法を調べてみてください。

  1. `mysql_secure_installation` を調べてみる

  2. 次のSQLを調べてみる
```     ALTER USER 'root'@'localhost' identified BY 'XXXX';

    
```

* * *

MySQLのバージョンによって、パスワードの設定方法に違いがあるようです。  
新しいバージョンではALTER USERを使うようですが、私は使ったことがありません。

```

    ALTER USER 'root'@'localhost' identified BY 'XXXX';
    
```

私は `mysql_secure_installation` コマンドを使って、MySQLのrootユーザのパスワードを設定しています。  
MySQLのインストール直後に実行しているので、既にユーザやテーブルを作成してあるときの影響は分かりません。
CC BY-SA 4.0
2021-07-13T11:09:24.847
78155
2021-07-14T00:17:28.643
2021-07-14T00:17:28.643
3060
35558
78148
answer
うちのNASにmariadb をインストールしてみたところ、次のようになりました。

```

    MariaDB [mysql]> select user,host,password from user;
    +------+-----------+-------------------------------------------+
    | user | host      | password                                  |
    +------+-----------+-------------------------------------------+
    | root | localhost | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |
    | root | agartha   |                                           |
    | root | 127.0.0.1 |                                           |
    | root | ::1       |                                           |
    |      | localhost |                                           |
    |      | agartha   |                                           |
    +------+-----------+-------------------------------------------+
    6 rows in set (0.00 sec)
    
    MariaDB [mysql]> 
    
```

このように、ユーザー名、パスワードが空白のUSERがいるので、mysqlコマンドだけでDBにはいれるようになっているはずです。

なので、mysql.userからパスワードが’’となっているユーザーを削除し、データベースを再起動すればmysqlコマンドのみでログインは出来なくなるはずです
CC BY-SA 4.0
2021-07-13T11:31:15.453
78156
2021-07-13T11:31:15.453
44341
78148
answer