コンテンツにスキップ

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;