グローバル権限、データベース権限、テーブル権限など
Oracleではシステム権限とオブジェクト権限(と、SYSDBAなどの特殊権限)に別れるように、MySQLも権限のレベルがあります。
Oracleでいうところのシステム権限は、MySQLでグローバル権限、とおぼえてほぼ間違いないかと。
権限付与は、SQLお約束のGRANT文で。
GRANT権限種類 [(カラム)] ONデータベース.テーブル TO付与対象ユーザ [WITHGRANTOPTION]
ここで、
データベース:sampledb
テーブル:sample_tbl
カラム:col1,col2, ...
といった構造がある場合、GRANT文は以下の様な感じ。
権限種別 | GRANT文 |
---|---|
グローバル権限 | GRANT 権限種別 ON *.* TO ... |
データベース権限 | GRANT 権限種別 ON sampledb.* TO ... |
テーブル権限 | GRANT 権限種別 ON sampledb.sample_tbl TO ... |
カラム権限 | GRANT SELECT(col1,col2) ON sampledb.sampletbl TO ... |
ストアドルーチン(ストアドプロシージャ)に対する権限コントロールも、テーブル権限の構文と同じです。
権限の種類
これは素直にマニュアルを見るべし。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.7.1.4 GRANT 構文
表 13.1 GRANT および REVOKE に対して許容可能な権限
に、権限の種類と、どの権限がどのレベルで付与可能か記載されています。
Oracle経験者には、いくつか見慣れない権限があるものの、おおよそ困ることはないかと思います。
「USAGE権限」とは
「権限なし」のシノニムです
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.7.1.4 GRANT 構文
ってなんじゃいな、って感じの説明ですが。特に権限がないよ、っていう権限です。
Oracleではユーザーを作るとまっさきに付与する「connect」がほぼイコールだと思ってもらってよいかと。
MySQLでは、CREATE USER文を発行してユーザーを作成すると、「USAGE」権限が自動付与されて、接続自体は可能となります。
しかし、他の権限はついてないので、SELECT等何もできません。
権限付与状況の確認
SHOW GRANTS FORユーザー名
で、付与状況が確認できます。
特徴としては、
- GRANT文そのまま出力されます。
- 複数回に分けてGRANTしたとしても、マージされたGRANT文になります。
- 権限レベル(グローバル/データベースなど)毎に1文で表現されます。
GRANTSELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATEVIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATEUSER, EVENT, TRIGGERON *.* TOユーザー名 IDENTIFIEDBY PASSWORD '暗号化済パスワード'WITHGRANTOPTION
この場合、たくさんの権限種別が見えますが、グローバル権限だけを与えているため、1行で表現されます。
先ほどのUSAGEは、マージされて見えなくなってしまいますが、USAGE権限の名残としてIDENTIFIED BY パスワードが含まれています。
これが、データベース権限で付与されているユーザーの場合
GRANT USAGE ON *.* TOユーザー名 IDENTIFIEDBY PASSWORD '暗号化済パスワード'GRANTALLPRIVILEGESONデータベース名.* TOユーザー名
といったように、権限レベル毎に行が別れ、グローバル権限として唯一の存在であるUSAGEはそのまま見えている、という表示のされ方になります。
作業に先行して設計書とか手順書みたいなドキュメントに記述するとき、USAGEを記載するかしないかで混乱したので、調べてみましたとさ。
Clik here to view.

- 作者:鈴木啓修,山田奈緒子
- 出版社/メーカー:技術評論社
- 発売日: 2014/12/18
- メディア:単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る