MySQL
権限管理
GRANTS

MySQLの権限の確認や外部からのアクセス

MySQLの権限の確認や外部からのアクセス

たまにしか使わないのでメモがてら。

権限

権限の確認方法

SHOW GRANTSコマンド

mysql> -- 現在MySQLへ接続しているアカウントの権限確認
mysql> SHOW GRANTS;

+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION       |
+---------------------------------------------------------------------+

mysql> -- 特定のユーザーの権限を確認
mysql> SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION       |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

読み方

GRANT ALL ON *.* TO 'root' @ 'localhost' WITH GRANT OPTION
GRANT 権限の種類 ON DB.TABLE TO ログイン名 @ ホスト名 他者の権限変更権

権限の種類

権限はカンマ区切りで、複数選択可能です。

権限 意味
ALL
[PRIVILEGES]
GRANT OPTION 以外のすべての権限を設定
ALTER ALTER TABLE の使用を可能にします(テーブルの書き換え)
ALTER
ROUTINE
#2
CREATE CREATE TABLE を使えるようになる
CREATE
ROUTINE
#2
CREATE
TEMPORARY
TABLES
#2
DELETE CREATE VIEW を使用可能にする
DROP DROP TABLE を使用可能にする
EVENT #2
EXECUTE ストアドルーチンの起動関連
FILE LOAD DATA INFILE 等の使用が可能
INDEX CREATE INDEX や DROP INDEXの使用が可能
INSERT INSERTの使用が可能となる
UPDATE アップデート文の使用が可能
LOCK TABLES SELECT権限を持っているテーブルをロックできるようになる
PROCESS #2
RELOAD #2
SELECT SELECT文を使用可能にする
SHOW
DATABASES
データベース一覧を取得可能に
SHUTDOWN #2
SUPER #2
TRIGGER #2
USAGE 権限が無い
GRANT
OPTION
権限を与える事が可能に

#2は追々記載します。

実際にユーザーを作ってみよう

SQLの構文

CREATE USER 'userName'@'localhost' IDENTIFIED BY '12345';

実演

mysql> CREATE USER 'userName'@'localhost' IDENTIFIED BY '12345';
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for 'userName'@'localhost';
+--------------------------------------------------------------------------------+
| Grants for userName@localhost                                                  |
+--------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'userName'@'localhost' IDENTIFIED BY PASSWORD 'PASSWORD' |
+--------------------------------------------------------------------------------+
1 row in set (0.00 sec)

>mysql -u userName -p
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
--省略
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

無事ログインできました、ユーザーが作れましたね

権限を付与してみよう。

SQLの構文

書式
GRANT 権限 ON レベル TO ユーザー;
実行する文
GRANT SELECT,INSERT,CREATE ON test.* TO userName@localhost;

解説)testデータベースのSELECTとINSERTの権限をuserNameに付与する。

mysql> GRANT SELECT,INSERT,CREATE ON test.* TO userName@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye

C:\>mysql -u userName -p
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
--省略
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> USE test
Database changed
mysql> CREATE TABLE test_table ( a INT );
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO test_table VALUES (999);
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM test_table;
+------+
| a    |
+------+
|  999 |
+------+
1 row in set (0.00 sec)

mysql> --試しにDROP TABLEしてみます;
mysql> DROP TABLE test_table;
ERROR 1142 (42000): DROP command denied to user 'userName'@'localhost' for table 'test_table'

このような形で弾かれます。

以上ではありますが
気が向いたら更新行っていきたいと思います。

参考サイト

DBOnline様->限定設定

@YoheiMiyamoto様->mysqlユーザー作成&権限追加

@PallCreaker様->MySQL の権限のコマンドまとめ。