DCL@SQL¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. DCLとは¶
トランザクションを制御するクエリのこと。
02. BEGIN (START TRANSACTION)¶
BEGINとは¶
トランザクションを開始する。
START TRANSACTION
としてもよい。
BEGIN;
START TRANSACTION;
03. COMMIT¶
COMMITとは¶
コミットを実行しつつ、トランザクションを終了する。
-- トランザクションを終了する
BEGIN;
-- 何らかのステートメント
-- コミットを実行しつつ、トランザクションを終了する
COMMIT;
04. GRANT¶
ユーザーの種類¶
▼ ルートユーザー¶
ルートユーザーには、最初から全てのDBに対して権限を付与されており不要。
▼ アプリケーション¶
使用するDBに対する全権限を付与する。
-- DB名をクオーテーションで囲う必要はない
GRANT ALL PRIVILEGES ON {DB名}.* TO '{ ユーザー名 }'
▼ 読み出し/書き込みユーザー¶
使用するDBに対する全権限を付与する。
-- DB名をクオーテーションで囲う必要はない
GRANT ALL PRIVILEGES ON {DB名}.* TO '{ ユーザー名 }'
▼ 読み出しのみユーザー¶
使用するDBに対するSELECT権限を付与する。
-- DB名をクオーテーションで囲う必要はない
GRANT SELECT ON {DB名}.* TO '{ ユーザー名 }';
全ての認可スコープを付与¶
DB名は、シングルクオーテーションで囲う必要が無い。
全権限を付与する場合、PRIVILEGES
は省略できるが、厳密には省略しないようほうが良い。
-- 全てのDBに関する権限を付与
GRANT ALL PRIVILEGES ON *.* TO "{ ユーザー名 }";
-- AWS AuroraまたはAWS RDSの場合はこちら
GRANT ALL PRIVILEGES ON `%`.* TO "{ ユーザー名 }";
-- AWS Auroraも同じく
-- 特定のDBに関する全権限を付与
GRANT ALL PRIVILEGES ON {DB名}.* TO "{ ユーザー名 }";
一部の認可スコープを付与¶
特定のDBに関する読み出し権限のみ付与する。
GRANT SELECT ON {DB名}.* TO "{ ユーザー名 }";
ユーザー権限一覧¶
ユーザーに付与されている権限を取得する。
SHOW GRANTS FOR "{ ユーザー名 }";
作成したのみで権限を何も付与してないユーザーの場合、『dbサーバー内の全DBに関して、全権限なし』を表すUSAGE
として表示される。
GRANT USAGE ON *.* TO "{ ユーザー名 }";
特定のDBの認可スコープを与えると、上記に加えて、付与したGRANT権限も表示されるようになる。
05. REVOKE¶
全権限削除¶
全権限を削除し、GRANT権限をUSAGEに戻す。
-- AWS AuroraまたはAWS RDSの場合
REVOKE ALL PRIVILEGES ON `%`.*
FROM
"{ ユーザー名 }";
REVOKE ALL PRIVILEGES ON { DB名 }.*
FROM
"{ ユーザー名 }";
ユーザー名変更¶
RENAME USER "{ 古いユーザー名 }" TO "{ 新しいユーザー名 }";
06. ROLLBACK¶
ROLLBACKとは¶
トランザクション中の一連のステートメントを取り消し、元の状態に戻す。
RDBMSでいう『ロールバック』の概念を実装する。
-- トランザクションを開始する
BEGIN;
-- テーブルのデータを削除するステートメント
DELETE FROM score;
-- 削除されたデータを確認するステートメント
SELECT *
FROM score;
-- ここで、トランザクションに何らかの問題が起こる
-- ロールバックする
ROLLBACK;
-- コミットを実行しつつ、トランザクションを終了する
COMMIT;
トランザクション後にもう一度クエリを送信すると、データが復元されている。
-- データが復元される
SELECT *
FROM score;