First Creation 2005/02/11
Last Update 2007/02/05
Bloody Mary > Technical Notes > MySQL のユーザー管理 - ユーザ作成

MySQL のユーザー管理 - ユーザ作成

さて、MySQL が動くようになったところで、コマンドラインからデータベースを操作してみよう。いろいろやらかしてしまうのはお約束だ。

スーパーユーザと一般ユーザの追加

スーパーユーザーの作成

まずは基本中の基本であるユーザー管理からスタート。root の他に、Administrator というスーパーユーザーを作ってみよう。その後、mysql という一般ユーザーを作成する。

それから覚えておくといいのが、grant や insert でユーザーのパスワードを扱うときは、' (シングルコーテーション)や " (ダブルコーテーション)で囲った方がいいということだ。

もしこのページのコマンドがうまく動かなかったら、ユーザー名やパスワードをその記号で囲ってみるとうまく動作するかもしれない。

1. ユーザー情報が保存されている、mysql というデータベースの中の、user テーブルを見る。
mysql> show databases;
+----------+
| Database |
+----------+
| mysql    |
| test     |
| user_db  |
+----------+
3 rows in set (0.00 sec)

mysql> use mysql;
Database changed

mysql> show tables;
+-----------------+
| Tables in mysql |
+-----------------+
| columns_priv    |
| db              |
| func            |
| host            |
| tables_priv     |
| user            |
+-----------------+
6 rows in set (0.01 sec)

mysql> describe user;
+-----------------+---------------+------+-----+---------+-------+
| Field           | Type          | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| Host            | char(60)      |      | PRI |         |       |
| User            | char(16)      |      | PRI |         |       |
| Password        | char(16)      |      |     |         |       |
| Select_priv     | enum('N','Y') |      |     | N       |       |
| Insert_priv     | enum('N','Y') |      |     | N       |       |
| Update_priv     | enum('N','Y') |      |     | N       |       |
| Delete_priv     | enum('N','Y') |      |     | N       |       |
| Create_priv     | enum('N','Y') |      |     | N       |       |
| Drop_priv       | enum('N','Y') |      |     | N       |       |
| Reload_priv     | enum('N','Y') |      |     | N       |       |
| Shutdown_priv   | enum('N','Y') |      |     | N       |       |
| Process_priv    | enum('N','Y') |      |     | N       |       |
| File_priv       | enum('N','Y') |      |     | N       |       |
| Grant_priv      | enum('N','Y') |      |     | N       |       |
| References_priv | enum('N','Y') |      |     | N       |       |
| Index_priv      | enum('N','Y') |      |     | N       |       |
| Alter_priv      | enum('N','Y') |      |     | N       |       |
+-----------------+---------------+------+-----+---------+-------+
17 rows in set (0.00 sec)

describe は、Field 情報を表示させるコマンドだ。

上記表示結果から、ユーザーテーブルの中身は、ホスト名、ユーザー名、パスワードの他に、14 種類の権限を設定する項目があり、計 17 項目から成り立っていることが分かる。

2. スーパーユーザー Administrator の追加

以下のコマンドを打ち込むことで、Administrator という名のスーパーユーザーができあがる。

insert コマンドでスーパーユーザーを作成
mysql> insert into user values('localhost', 'Administrator', password('hogehoge'),
    'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

また、ユーザーを追加する方法は grant コマンドからも可能だ。

例: grant コマンドでーパーユーザーを作成
mysql> grant all privileges on *.* to Administrator@localhost identified by 'hogehoge' \
       with grant opttion;
3. ユーザーの確認

ユーザーを確認する方法は SELECT コマンドを使う。以下のコマンドは、mysql データベースの user テーブルを表示させなさいという命令。

mysql> select host,user,password from mysql.user;
+-----------+---------------+------------------+
| host      | user          | password         |
+-----------+---------------+------------------+
| localhost | root          | 442455895eac74e7 |
| localhost | Administrator | 442455895eac74e7 |
+-----------+---------------+------------------+
2 rows in set (0.01 sec)

Administrator のパスワードは root と同じにしたため、同じハッシュ値(暗号化されたパスワード)が表示されている。

両方あってもしょうがないので、root の方を消すことにした。

4. root 削除
mysql> delete from user where user='root' and host='localhost';
Query OK, 1 row affected (0.00 sec)

いったん C Shell ( zaurus で使っているシェル) に戻ってサーバーを再起動させ、 Administrator で入りなおした。

ここまでくればやり方はわかると思うが・・・念のため。

# mysqlstop
# mysqlstart
# mysql -u Administrator -p
Enter password: パスワード入れて Enter
 

一般ユーザーの作成

1. 一般ユーザーの作成

さて、お次は一般ユーザーの作成である。一般ユーザーにはどのような権限を与えたらいいだろうか。一つ一つ確認していこう。

権限 詳細 実際の設定
Select_priv すでに存在しているテーブルの 操作権限 Y
Insert_priv すでに存在しているテーブルの 操作権限 Y
Update_priv すでに存在しているテーブルの 操作権限 Y
Delete_priv すでに存在しているテーブルの 操作権限 Y
Create_priv データベース作成権限 Y
Drop_priv データベース削除権限 Y
Reload_priv リロード権限データベースを更新したときに使うはず Y
Shutdown_priv MySQL サーバー停止権限 N
Process_priv 接続中のユーザー一覧を表示させる機能 N
File_priv バイナリデータを扱う権限 N
Grant_priv Grant コマンド使用権限 N
References_priv 不明 N
Index_priv インデックスの作成と削除権限。いらないかな? N
Alter_priv テーブル構造の変更権限 N

上記の内容を反映させて、mysql という一般ユーザーを作成する。

mysql> use mysql;
Database changed

mysql>  insert into user values('localhost', 'mysql', password('hogehoge'),
    'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'N');
Query OK, 1 row affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
2. ユーザーの削除

さて、ここまではいいだろうか。では、次に作ったユーザーの削除をしてみる。

mysql> delete from user where user='mysql';
Query OK, 1 row affected (0.01 sec)

基本的にはこれだけ。「flush privileges;」は忘れないように。

 

トラブル

root を消してしまった・・・

MySQL で遊んでいるうちに root ユーザーを消してしまった。しかもスーパーユーザーである Administrator を追加する前にだ。

簡単に復帰させることができたが、またやらかす可能性も考えてその方法を書き留めておく。

ただし、root 以外のユーザーが最低一人、登録されている必要があると思う。でないと入れないし・・・まさか一人もいなくなるということはないだろうが・・・まさか君は!?

だからこのテンションの高さは何なんだ。後から見ると分けがわからん。(2007/01/31)

1. MySQL を停止

mysqlstop が効かないようなら zaurus の再起動をすれば MySQL は止まってる・・・はず。いざとなったら # ps aux で MySQL のプロセス ID を調べて、 # kill [プロセス ID] する。

2. オプションつきで MySQL を起動
# safe_mysqld  --skip-grant-tables --skip-networking --user=mysql &

--skip-grant-tables オプションで、すべてのユーザーが grant コマンドを使えるようになった。つまり、権限が最低なアカウントでも他のユーザーを作成できるということだ。

3. MySQL シェルへ
# mysql -u mysql  -p
mysql> grant all on *.* to root@localhost identified by "my_password" with grant option;

これで root が復活する。

戻る 上へ 次へ