はじめてのSQL【初心者編:DCLについて】
こんにちは。
スタッフブログ担当の岩でございます。
前回はSQLのDMLについての記事を公開いたしました。
https://vift.co.jp/blog/はじめてのsql【初心者編:dmlについて】/
今回はDCLの詳細について説明いたします。
DCL(データ制御言語)
DCLに分類される命令は次の通りです。
・COMMIT:データベースに対して行った変更を確定する。
・ROLLBACK:データベースに対して行った変更を取り消す。
・GRANT:ユーザーに操作の権限を与える。
・REVOKE:ユーザーから操作の権限を奪う。
DCLに分類されるSQL文やトランザクションの開始文はDBMSによって異なります。
DBMSの種類ごとに、それぞれの書き方を説明いたします。
COMMIT
ROLLBACK
・変更の確定、取り消し
COMMITとROLLBACKはトランザクションの終了文として扱われます。
(※トランザクションについては次回説明いたします。)
SQL Server、PostgreSQL
BEGIN TRANSACTION
MySQL
START TRANSACTION
Oracle、DB2
なし
Oracle、DB2では自動でトランザクションが開始されるため、トランザクション開始文がありません。
トランザクション終了文のみ記述します。
INSERT、UPDATE、DALETEで変更されたデータを確定します。
(以下例はMySQLの場合)
START TRANSACTION
<insert文>
<update文>
<delete文>
COMMIT;
INSERT、UPDATE、DALETEで変更されたデータを取り消しします。
(以下例はMySQLの場合)
START TRANSACTION
<insert文>
<update文>
<delete文>
ROLLBACK;
DCL君が変更の取り消し、確定をするよ
GRANT
・ユーザーに権限を与える
テーブルのSELECT権限やINSERT権限を許可することができます。
SQL server , MySQL
GRANT SELECT ON <オブジェクト名> TO <ユーザー名>;
shopデータベース内にあるtenpo.shohinテーブルでのSELECT権限を、ユーザーuser1に対して許可する場合、以下の通りになります。
GRANT SELECT ON tenpo.shohin TO user1@localhost;
PostgreSQL
GRANT SELECT ON <テーブル名> TO <ロール名>;
PostgreSQLでの権限の付与は、ユーザーに対してではなくロールに対して行います。
ロールとは簡単に説明いたしますと、権限をまとめたものになります。
初心者編なので、「そういうものか~」と思っていただければ幸いです。
shopデータベース内にあるshohinテーブルでのSELECT権限を、ロールrole1に対して許可する場合、以下の通りになります。
GRANT SELECT ON shohin TO role1;
ORACLE
GRANT SELECT ON <テーブル名> TO <ユーザー名>;
ORACLEの場合、任意の表やオブジェクトに対するオブジェクト権限とデータベースに対するシステム権限に分かれます。
今回紹介するのはオブジェクト権限を付与する書き方になります。
システム権限を付与する書き方とは異なりますのでご注意ください。
shopデータベース内にあるtenpo.shohinテーブルでのSELECT権限を、ユーザーuser1に対して許可する場合、以下の通りになります。
GRANT SELECT ON tenpo.shohin TO user1;
許可できる権限は他にもありますが、この記事は初心者編のため、SELECT権限の例のみを紹介いたします。
REVOKE
・ユーザーの権限を奪う
テーブルのSELECT権限やINSERT権限を取り消すことができます。
SQL server・MySQL、PostgreSQL、ORECLEのそれぞれの書き方をご紹介いたします。
SQL server , MySQL
REVOKE SELECT ON <オブジェクト名> FROM <ユーザー名>;
shopデータベース内にあるtenpo.shohinテーブルでのSELECT権限を、ユーザーuser1から剥奪する場合、以下の通りになります。
REVOKE SELECT ON tenpo.shohin FROM user1@localhost;
PostgreSQL
REVOKE SELECT ON <テーブル名> FROM <ロール名>;
shopデータベース内にあるshohinテーブルでのSELECT権限を、ロールrole1から剝奪する場合、以下の通りになります。
REVOKE SELECT ON shohin FROM role1;
ORACLE
REVOKE SELECT ON <テーブル名> FROM <ユーザー名>;
shopデータベース内にあるtenpo.shohinテーブルでのSELECT権限を、ユーザーuser1から剝奪する場合、以下の通りになります。
REVOKE SELECT ON tenpo.shohin FROM user1;
ユーザー名やロール名の前のキーワードがGRANTの場合「TO」だったのが、REVOKEの場合「FROM」に変わっています。
間違えないようにご注意ください。
DCL君が権限の付与、剝奪をするよ
まとめ
今回はSQL文のDCL(データ制御言語)について説明いたしました。
初心者のうちはGRANT、REVOKEを使う機会は少ないと思います。
次回紹介するトランザクションについて理解を深めて、正しくCOMMIT、ROLLBACKを使用してください。
最後まで読んでくださりありがとうございました。
次回はトランザクションについて説明いたします。
どうぞよろしくお願いいたします。