今回は Step2 で作成した「test」ユーザーを例に権限の働きを確認してみましょう。
「test」ユーザーを作成、権限付与した時のSQL文
GRANT SELECT ON SampleDB040.* TO test@localhost IDENTIFIED BY '6789';
「test」ユーザーには SELECT の権限しか与えていません。
今回MySQLに接続するユーザーは「test」ですので、間違えないように気を付けてください。
【1】以下の図を参考にMySQLを開始・接続します。
1.コマンドプロンプトを起動します。
2.「net start mysql」と入力し、「Enterキー」を押します。
3.「mysql -u test -p -b」と入力し、「Enterキー」を押します。
4.パスワードを求められるので「6789」入力し、「Enterキー」を押します。
*「-b」オプションを付けて起動するとビープ音が出なくなります。
【2】コマンドプロンプトのタイトルを見ると、今どのユーザーがどんなオプションでMySQLに接続しているかわかります。
*頻繁にユーザーを切り替えるとき、確認すると便利です。
【3】以下のSQL文を入力し、使用するデータベースを選択します。
USE SampleDB040;
まずSELECT文を使ってみましょう。
【4】以下のSQL文を入力し、「Enterキー」を押します。
SELECT * FROM T01Prefecture;
【5】「test」ユーザーでも問題なく検索はできます。
次はINSERT文を使ってみましょう。
【6】以下のSQL文を入力し、レコードを「追加」します。
INSERT INTO T01Prefecture (PREF_CD, PREF_NAME) VALUES(99,'ハワイ');
*ユーザーに追加の権限が無いため、エラーが表示されます。同様に更新、削除も行なうことはできません。
【7】以下の図を参考にMySQLを終了・停止します。
1.「exit」と入力し、「Enterキー」を押します。
2.「net stop mysql」と入力し、「Enterキー」を押します。
【8】コマンドプロンプトは閉じてください。
【解説】
上記で確認したように、ユーザーは権限を与えられた操作以外はできないようになるので、データベースのセキュリティ面が向上します。
データを追加・更新・削除できるユーザー、検索だけできるユーザー、特定のテーブルの特定のフィールドのみ参照できるユーザーなど細かい設定ができます。
または会社の部署ごとに参照できるデータベースやテーブルを限定するような使い方もできます。データを入力する人、集計する人といった個人の仕事の役割で権限を設定してもよいでしょう。
管理者としてはユーザーの予想外の操作を防止できるメリットもあります。検索だけできるユーザーに対しては、データを削除される可能性は考えなくてよくなるわけです。
特定のフィールドのみ指定した例
GRANT SELECT(PREF_NAME) ON SampleDB040.T01Prefecture TO test@localhost IDENTIFIED BY '6789';
この場合はSampleDB040データベースのT01PrefectureテーブルにあるPREF_NAMEというフィールドしか参照できないユーザーです。