First Creation | 2005/02/11 |
---|---|
Last Update | 2007/02/05 |
さて、MySQL が動くようになったところで、コマンドラインからデータベースを操作してみよう。いろいろやらかしてしまうのはお約束だ。
まずは基本中の基本であるユーザー管理からスタート。root の他に、Administrator というスーパーユーザーを作ってみよう。その後、mysql という一般ユーザーを作成する。
それから覚えておくといいのが、grant や insert でユーザーのパスワードを扱うときは、' (シングルコーテーション)や " (ダブルコーテーション)で囲った方がいいということだ。
もしこのページのコマンドがうまく動かなかったら、ユーザー名やパスワードをその記号で囲ってみるとうまく動作するかもしれない。
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 項目から成り立っていることが分かる。
以下のコマンドを打ち込むことで、Administrator という名のスーパーユーザーができあがる。
mysql> insert into user values('localhost', 'Administrator', password('hogehoge'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
また、ユーザーを追加する方法は grant コマンドからも可能だ。
mysql> grant all privileges on *.* to Administrator@localhost identified by 'hogehoge' \ with grant opttion;
ユーザーを確認する方法は 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 の方を消すことにした。
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
さて、お次は一般ユーザーの作成である。一般ユーザーにはどのような権限を与えたらいいだろうか。一つ一つ確認していこう。
権限 | 詳細 | 実際の設定 |
---|---|---|
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)
さて、ここまではいいだろうか。では、次に作ったユーザーの削除をしてみる。
mysql> delete from user where user='mysql'; Query OK, 1 row affected (0.01 sec)
基本的にはこれだけ。「flush privileges;」は忘れないように。
MySQL で遊んでいるうちに root ユーザーを消してしまった。しかもスーパーユーザーである Administrator を追加する前にだ。
簡単に復帰させることができたが、またやらかす可能性も考えてその方法を書き留めておく。
ただし、root 以外のユーザーが最低一人、登録されている必要があると思う。でないと入れないし・・・まさか一人もいなくなるということはないだろうが・・・まさか君は!?
だからこのテンションの高さは何なんだ。後から見ると分けがわからん。(2007/01/31)
mysqlstop が効かないようなら zaurus の再起動をすれば MySQL は止まってる・・・はず。いざとなったら # ps aux で MySQL のプロセス ID を調べて、 # kill [プロセス ID] する。
# safe_mysqld --skip-grant-tables --skip-networking --user=mysql &
--skip-grant-tables オプションで、すべてのユーザーが grant コマンドを使えるようになった。つまり、権限が最低なアカウントでも他のユーザーを作成できるということだ。
# mysql -u mysql -p
mysql> grant all on *.* to root@localhost identified by "my_password" with grant option;
これで root が復活する。