43227
mysqlで

```

    mysql -u -p
    
```

と接続すればuserは、

```

    MariaDB [(none)]> select user();
    +--------------+
    | user()       |
    +--------------+
    | -p@localhost |
    +--------------+
    1 row in set (0.00 sec)
    
```

となりますし、  
`mysql`  
と接続すればuserは、

```

    MariaDB [(none)]> select user();
    +----------------+
    | user()         |
    +----------------+
    | ***(※microsoftのアカウント名)@localhost |
    +----------------+
    1 row in set (0.00 sec)
    
```

となります。

またこれらのようなアカウントに見覚えがないので、-p@localhost(`current_user()`を実行するとなぜか「@localhost」となる)の状態でmysql.userを見ようとすると

```

    MariaDB [(none)]> select user,host,password from mysql.user;
    ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for table 
    'user'
    MariaDB [(none)]> exit;
    Bye
    
```

テーブル上にそんなユーザーは存在しない,というエラーがでてしまいます。***(※microsoftのアカウント名)@localhostでも同じです。

rootでやるとエラーが出ずに正常です。

```

    MariaDB [(none)]> select user,host,password from mysql.user;
    +------+-----------+-------------------------------------------+
    | user | host      | password                                  |
    +------+-----------+-------------------------------------------+
    | root | localhost | ***************************************** |
    | root | 127.0.0.1 | **********                                |
    | root | ::1       | **********                                |
    |      | localhost |                                           |
    | pma  | localhost |                                           |
    +------+-----------+-------------------------------------------+
    5 rows in set (0.00 sec)
    
```

いづれもcurrent_userすると「@localhost」となるので恐らく匿名アカウントだと思いますがあっておりますか。  
恐らくuserが空っぽのやつに接続しているのだと思いますが、これさえ削除すればこのようなでたらめな接続は、できなくなりますか。
CC BY-SA 3.0
2018-04-13T10:42:40.973
43212
2018-04-14T08:12:05.750
27720
question
mysql windows-10 mariadb
これは、匿名アカウントなのか
>
```

>     MariaDB [(none)]> select user,host,password from mysql.user;
>     +------+-----------+-------------------------------------------+
>     | user | host      | password                                  |
>     +------+-----------+-------------------------------------------+
>     | root | localhost | ***************************************** |
>     | root | 127.0.0.1 | **********                                |
>     | root | ::1       | **********                                |
>     |      | localhost |                                           |
>     | pma  | localhost |                                           |
>     +------+-----------+-------------------------------------------+
>     5 rows in set (0.00 sec)
>  
```

4行目のユーザーが匿名ユーザーです。基本匿名ユーザーを必要とする場面はないので、削除してください。これを含めて基本的に考慮すべきセキュリティはマニュアルに記載されています。

<https://dev.mysql.com/doc/refman/5.6/ja/default-privileges.html>

* * *

匿名ユーザーは、接続時に指定されたユーザーが存在しない場合に割り当てられるユーザーです。

>
```

>     mysql -u -p
>  
```

これは`-p`というユーザーで接続しようとしていますが、MySQL上に`-p`というユーザーが存在しないので、匿名ユーザーが割り当てられます。

`mysql`コマンドでユーザーを指定しない場合に匿名ユーザーで接続される **わけではありません**
。`mysql`コマンドでユーザーを指定しない場合、大抵の環境ではOSのユーザー名が使われます。MySQLに同名のユーザーが存在すれば当然そちらが使われます。同名のユーザーが存在しない場合に匿名ユーザーが割り当てられます。

>
```

>     MariaDB [(none)]> select user,host,password from mysql.user;
>     ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for
> table 'user'
>  
```

>
> テーブル上にそんなユーザーは存在しない,というエラーがでてしまいます

違います。匿名アカウントが`mysql.user`テーブルにアクセスする権限がないためはじかれています。
CC BY-SA 3.0
2018-04-14T02:40:59.607
43227
2018-04-14T02:40:59.607
5793
43212
answer
"`current_user()`を実行するとなぜか「@localhost」となる" の部分について。

`USER()` と `CURRENT_USER()` は異なります。

`USER()` は「サーバーへの接続時に指定したユーザー名および接続元のクライアントホスト」であるのに対し、`CURRENT_USER()`
は「現在のクライアントを認証する際にサーバーで使用された MySQL アカウントを表すユーザー名とホスト名の組み合わせ」です。

マニュアルの次の章が参考になると思います。  
* [SQL ベースの MySQL アカウントアクティビティーの監査](https://dev.mysql.com/doc/refman/5.6/ja/account-activity-auditing.html)  
* [USER()](https://dev.mysql.com/doc/refman/5.6/ja/information-functions.html#function_user)  
* [CURRENT_USER()](https://dev.mysql.com/doc/refman/5.6/ja/information-functions.html#function_current-user)
CC BY-SA 3.0
2018-04-14T08:12:05.750
43234
2018-04-14T08:12:05.750
3249
43212
answer