Edited at

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

More than 1 year has passed since last update.


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 の権限のコマンドまとめ。