MySQL のユーザ管理について解説していきます。誰でも大切なデータにアクセスする事ができてしまっては困るので、きちんとユーザごとに管理しておくようにしましょう。
|
|
■データベースの作成
まず、root でログインし、テーブルを作成しておきます。show databases;でdb1テーブルが作成されたことを確認してください。なお、SQL文の最後には必ず「;
」が必要になります。「; 」は「\g 」でも代用できます。
# mysql -u root -p
mysql> CREATE DATABASE db1;
mysql> SHOW DATABASES; |
|
コマンドを打ち間違えたりなどして、-> の状態から抜けたい場合、
\c と入力することで抜けられます。exit
やbye、quit どれを入力しても抜けられないので注意してください(^▽^;)
mysql> show databases
->\c
mysql> |
|
■ユーザの登録/権限の付与
ユーザーの登録や権限の変更を行う場合には、GRANT文を使用します。データベースの操作にいつまでも root
として作業を行うのはセキュリティ上、好ましくないので、ここでDBを操作できるユーザーを作成しておきます。構文は以下のとおりです。
◎GRANTの構文
GRANT 権限 ON DB名.テーブル名 TO
ユーザ名 INDENTIFIED BY 'パスワード' |
|
ユーザーを作成するには具体的に以下のようにします。以下は、kororoというユーザーに対してlocalhost
でのアクセスを許可し、また、kororoに対してdb1のデータベースに関する全ての操作権限を与えるという意味になります。なお、以下のように一行で表示しなくても何行かに分けて入力することも可能です。
mysql> GRANT ALL
PRIVILEGES ON db1.*
mysql> TO 'kororo@localhost'
mysql> IDENTIFIED BY 'test_pass'; |
|
localhost を除く全てのホストからのアクセスを許可するには以下のようにします。
mysql> GRANT ALL
PRIVILEGES ON db1.*
mysql> TO 'kororo'
mysql> IDENTIFIED BY 'test_pass'; |
|
ユーザーを追加したら最後に以下のように、ユーザーテーブルをリフレッシュします。
これで、kororo がdb1 データベースにアクセスすることができるようになります。なお、kororoは、db1テーブルに対しての操作権限しか与えられていないため、show
databases 実行時には、デフォルトで閲覧できるtestとdb1 のデータベースしか見えなくなっていることを確認しておいてください。
# mysql -u kororo
-p
Enter password: |
|
◎設定例(管理者用)
以下2つの構文でどのホストからもアクセスできる完全なスーパーユーザーを作成できるようになります。注意したいのは、他ホストからのアクセス許可は勿論の事、localhost
のアクセス許可も与えてあげなければなりません。with grant optionを付け加えると、他のユーザの権限を書き換えることができるようになりますので管理者ユーザーを作成するときに用います。
mysql> GRANT ALL
PRIVILEGES ON *.* TO kororo@localhost IDENTIFIED
BY 'test_pass' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO
kororo@"%" IDENTIFIED BY 'test_pass'
WITH GRANT OPTION;
|
|
◎主な権限の種類
|
all |
全ての権限を与える。ALL PRIVIREGES または、ALL |
|
usage |
全ての権限を与えない |
|
create |
テーブルを作成する権限を付与する |
|
alter |
テーブルを変更する権限を付与する |
|
drop |
テーブルを削除する権限を付与する |
|
index |
インデックスを作成/削除する権限を付与する |
|
|
Select,Update,Insert,Delete ⇒テーブル操作の権限を付与する |
|
■簡単なクエリを送信する
mysql> select now(), user(), version();
+---------------------+------------------+------------+
| now() | user() | version() |
+---------------------+------------------+------------+
| 2004-01-25 04:16:01 | kororo@localhost | 4.0.17-log |
+---------------------+------------------+------------+
1 row in set (0.03 sec)
|
|
■ユーザー権限の閲覧
ユーザーに対してどのような権限が付与されたかどうか確認します。
mysql> show grants
for kororo@localhost;
mysql> show grants for kororo@localhost;
+-----------------------------------------------------------------------------------------------+
| Grants for kororo@localhost |
+-----------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON `db1`.* TO 'kororo'@'localhost' |
+-----------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
|
|
■ユーザー権限の削除
ユーザーの権限を削除するには、REVOKE文を使用します。以下では、CREATE権を除く全ての権限が削除されます。なお、ユーザーに対する全ての権限を剥奪したとしても、ユーザー自体が削除されるわけではないことに注意してください。
mysql> REVOKE
CREATE ON db1.* FROM kororo@localhost; |
|
db1 に対する全ての権限を削除したければ、ALL にしてREVOKEを実行します。
mysql> REVOKE
ALL ON db1.* FROM kororo@localhost; |
|
■ユーザーの削除
ユーザーを削除するには、データベースを選択後、DELETE FROM を使用します。削除されたかどうかは、SELECT
* FROM user で確認しておきます。
mysql> use db1
mysql> DELETE FROM user WHERE user='kororo';
mysql> SELECT host, user, password FROM
user; |
|
■ユーザーのパスワードを設定/変更
ユーザーのパスワードを設定するには以下のようにします。
mysql> SET PASSWORD
= PASSWORD('パスワード'); |
|
root がユーザーのパスワードを変更するには以下のようにします。
mysql> SET PASSWORD
for kororo = PASSWORD('パスワード'); |
|
■ユーザー管理テーブル
MySQLにはユーザーの権限を管理するためのテーブルが用意されており以下の5つのテーブルがあります。
|
user |
ユーザーのグローバルレベルの権限とパスワードを管理するテーブル |
|
db |
ユーザーのデータベースレベルの権限を管理するテーブル |
|
host |
dbテーブルにホスト名が指定されていない場合に適用される権限を管理するためのテーブル |
|
tables_priv |
ユーザーのテーブルレベルの権限を管理するテーブル |
|
columns_priv |
ユーザーのフィールドレベルの権限を管理するテーブル |
|
それぞれのテーブルを閲覧するには以下のようにします。横長になるので非常に見にくいかもしれません。
mysql> SELECT
* FROM mysql.user WHERE user='kororo';
mysql> SELECT * FROM mysql.db WHERE user='kororo';
mysql> SELECT * FROM mysql.tables_priv
WHERE user='kororo';
mysql> SELECT * FROM mysql.columns_priv
WHERE user='kororo'; |
|
■匿名ユーザーの削除
ユーザー名が特定できない匿名ユーザーを削除するには以下のコマンドを実行します。
mysql>DELETE FROM
mysql.user WHERE user=''; |
|
コマンドの実行を反映させるために以下コマンドを実行します。