データベースのユーザにデータベースの利用権限を設定するコマンドを紹介する。
SQLコマンド:
GRANT 権限 ON テーブル名 TO ユーザー
ユーザにデータベースの利用権限を与える
REVOKE 権限 ON テーブル名 FROM ユーザー
ユーザーからデータベースの利用権限を取り除く
権限の部分で指定可能なキーワード:
ALL(全て)・SELECT・INSERT・UPDATE・DELETE・REFERENCESなど
ユーザー:
DBMSに登録したユーザー名に対して権限を設定する。
ユーザー名にPUBLICを記述するとDBMSの全ユーザに対して権限を設定する。
権限は次のような単位で細かく設定可能である。
・データベースサーバ全体
・データベース単位
・テーブル単位
・フィールド単位
この演習は「x. トランザクションとロールバック演習2022」を完了してから取り組む必要がある。
準備: これまで同様にphpMyAdminを使用する。
概要:
データベースのユーザを2名追加
1名のユーザ権限を部分的に制限
セキュリティ機能の確認
解説動画2018年版
手順:
MySQLの管理画面phpMyAdminからユーザの作成と権限の設定を行う。GRANTとREVOKE コマンドは使用しない。
データベースのユーザーを追加する
※ mysqlのuserテーブルを直接編集しないでください。
userテーブルを破損した場合の復旧方法 https://twitter.com/_kobashi/status/1005082712657485825
phpMyAdminの ホームアイコンをクリック をクリックしてデータベースMySQLの設定画面を表示
User accounts (ユーザアカウント)をクリック
Add user account (ユーザアカウントを追加する) から
自分の学籍番号をユーザ名として入力し、パスワードは適当に決めて 新規ユーザーを登録する
ホスト名は ローカル を選択
グローバル特権 として「check all(すべてチェックする)」にチェックを入れ「実行」 ボタンを押す。(全コマンドの使用権限が与えられる)
もう1件、同様の手順で実験用ユーザを登録する
phpMyAdminの ホームアイコンをクリック をクリックしてデータベースMySQLの設定画面を表示
ユーザアカウント をクリック
ユーザアカウントを追加する のリンクをクリック
他人の学籍番号(架空でも可)をユーザ名とて入力し適当なパスワードで 新規ユーザー登録する
ホスト名はローカル を選択
グローバル特権 は与えない (どこにもチェックを入れない)
「実行」 ボタンを押す。
ユーザアカウントのタブをクリック
ここで作成した実験用の他人の学籍番号のIDのEdit privileges(権限を編集)ボタンをクリック
他人の学籍番号のIDにデータベースの特権を追加する
ユーザアカウントのタブの上部のデータベース ボタンをクリックし
データベースに固有の権限 で db学籍番号のデータベースを選択 して実行ボタンを押す
ユーザアカウントのタブの上部のテーブル ボタンをクリックして
テーブル固有の権限にある「以下のテーブルに権限を追加: 」のメニューで client を選択
SELECTコマンドの部分で ID NAME TEL の中から、NAMEだけを選択して、実行ボタンを押す。
以上で、他人の学籍番号のIDのユーザに対して
db学籍番号のデータベースの clientテーブルの NAMEフィールドを SELECT で表示する権限だけを与えた。(他の権限は与えられていない)
ユーザ登録と権限設定の確認:
phpMyAdminでデータベース mysql をクリックして開く
ビューをクリックして開く
userビューをクリックして ここまでの作業で追加した新規アカウントの存在を確認する
新規アカウントを追加する前のuserビューの例
userビューはglobal_priv(グローバル権限)テーブルやその他の権限テーブルを参照している
以下の手順で作成した各ユーザIDの権限を動作確認:
phpMyAdminのrootユーザは管理者権限でデータベースを操作するので権限は制限されていない。
以下の操作手順でXAMPP ControlのSHELLからMySQLサーバに登録したユーザIDで接続してコマンドを実行して権限を確認する。
SHELLボタンを押す
次のコマンドを入力して Enter キーを押す
mysql\bin\mysql -u 自分の学籍番号 -p
-u はデータベースのログインIDを指定するコマンドスイッチ
-p はパスワード入力のコマンドスイッチ
Enter Password: と表示されるのでパスワードを入力する (パスワード無しに設定した場合は単にEnterキーを押す)
use db3120888; (??????? はデータベース名に付けた学籍番号)を入力してEnterキーで実行して演習用データベースにアクセスする
select * from CLIENT;
自分の学籍番号のユーザIDにはデータベースの全権限を設定したのでテーブルのレコードの全てのフィールドが表示される
次のコマンドでデータベースサーバからログアウトする
exit
権限に制限を加えたIDでMySQLにログインする
mysql\bin\mysql -u 他人の学籍番号 -p
再び自分の演習用データベースにアクセスする(学籍番号は自分のもの)
use db3120888;
テーブルCLIENTのIDやTELのSELECTでの使用は許可されていないので表示できないことを確認する。(権限に関するエラーが起きる)
select * from CLIENT;
NAMEフィールドは、SELECTを許可されているので名前だけが表示される
select NAME from CLIENT;
コマンドプロンプトのスクリーンショットを撮る。
データベースにログインしたところから、name だけが表示されているところまでが表示されていることが条件。上掲の画像を参照。
提出先はWebclass参照。
データベースサーバからログアウトする
exit