はじめに
こんにちは。今回は、SQLのDCLについてまとめます。
本文
SQL-DCL
SQL-DCLは、データベースのデータに対してアクセス制御を行うための言語です。特定のユーザやロールの様々なアクセス権限を設定、変更、剥奪します。
アクセス権限
公開を限定するためにアクセス権限を設定するSQLがGRANT文です。
GRANT文では、特定のテーブルやビュー、ドメイン(定義域)、ロールなどのデータベースオブジェクトに対して、特定の動作権限を許可するユーザを設定します。
設定する権限には、SELECT(表示)、INSERT(挿入)、UPDATE(更新)、DELETE(削除)、REFERENCES(参照)、USAGE(利用)があります。
アクセスを許可するユーザとしては、ユーザ名だけでなく、ロールも設定できます。また、ロールをユーザに割り当てる場合にも、GRANT文でデータベースオブジェクトとしてロールを指定して設定します。
GRANT文の構文は下記の通りです。
[構文]GRANT文
GRANT { ALL [PRIVILEGES] } | SELECT
| INSERT [(列のリスト)] | DELETE
| UPDATE [(列のリスト)]
| REFERENCES [(列のリスト)] | USAGE
ON {[TABLE] 表(またはビュー)名 | DOMAIN ドメイン名
| COLLATION 参照順序名
| CHARCTER SET 文字コード設定名
| TRANSLATION 置換名}
TO {ユーザ名 | PUBLIC}
[WITH GRANT OPTION]
ALL [PRIVILEGES] は全ての権限を付与することを指します。
WITH GRANT OPTIONを指定することで、他のユーザに対してGRANT文でアクセス権限を付与する権利も付与することができます。例えば、商品表に対して、うさぎさんに全ての権限を付与する場合には、次のように記述します。
GRANT ALL PRIVILEGES ON 商品 TO うさぎ
トランザクション管理
トランザクションを開始、実行し、コミットやロールバックなどを行うためのSQLには様々なものがあります。
トランザクションを開始するときに使用する標準SQLは、START TRANSACTION文です。
-- 構文
START TRANSACTION { {READ ONLY | READ WRITE} [,...]
| ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED
| REPEATABLE READ | SERILALIZABLE[,...]}
| DIAGNOSTIC SIZE int(整数)};
トランザクション開始時に、ISOLATION LEVELでトランザクションの分離レベルを設定します。これは、複数のトランザクションがどのように実行されるかを示すための指標で、4種類あります。
-
READ UNCOMMITTED
コミットしていないデータまで読み取ります -
READ COMMITTED
コミットした最新データを読み取ります -
REPEATABLE READ
読み取り対象のデータが他のトランザクションで更新されないことを保証します -
SERIALIZABLE
トランザクションを独立して順番に実行した場合と同じ結果になります
また、トランザクションを確定させて終了する場合には、COMMIT文を使用します。トランザクションの実行を取り消して終了する場合には、ROLLBACK文を使用します。
まとめ
いかがでしたでしょうか?