データ制御言語(DCL )は、データベースに格納されたデータへのアクセスを制御する(承認)ために使用されるコンピュータプログラミング言語に似た構文です。特に、構造化照会言語(SQL)のコンポーネントです。データ制御言語は、SQLコマンドの論理グループの1つです。SQL [1]は、リレーショナルデータベース管理システムの標準言語です。SQLステートメントは、データベースへのデータの挿入、データベース内のデータの削除または更新、データベースからのデータの取得などのタスクを実行するために使用されます。
データベース システムでは SQL が使用されますが、通常はそのシステムでのみ使用される独自の拡張機能も追加されています。たとえば、Microsoft SQL サーバーでは、SQL の拡張機能である Transact-SQL (T-SQL) が使用されます。同様に、Oracle では、Oracle 専用の拡張機能である PL-SQL が使用されます。ただし、「Select」、「Insert」、「Update」、「Delete」、「Create」、「Drop」などの標準 SQL コマンドを使用すると、データベースで必要なほぼすべての操作を実行できます。
DCL コマンドの例は次のとおりです。
- 指定されたユーザーが指定されたタスクを実行できるようにするには、 GRANT を実行します。
- REVOKE は、データベース オブジェクトへのユーザー アクセスを削除します。
ユーザーまたはロールに権限を付与または取り消すことができる操作は、データ定義言語(DDL) とデータ操作言語(DML) の両方に適用され、CONNECT、 SELECT、INSERT、UPDATE、DELETE、EXECUTE、USAGE が含まれます。
マイクロソフトSQLサーバー
Microsoft SQL Serverでは、 SQL コマンドには 4 つのグループがあります。
- データ操作言語 (DML)
- データ定義言語 (DDL)
- データ制御言語(DCL [2])
- トランザクション制御言語 (TCL)
DCL コマンドは、データベース内のユーザーのアクセス制御と権限管理に使用されます。これを使用すると、テーブルまたはレコードに対するユーザーのアクションを簡単に許可または拒否できます (行レベルのセキュリティ)。
DCL コマンドは次のとおりです。
- 付与
- データベースの指定されたグループ/ユーザーに、テーブル (およびその他のオブジェクト) に対する特定の権限を与えることができます。
- 拒否
- グループ/ユーザーからの特定の権限を禁止します。
- 取り消す
- このコマンドはグループ/ユーザーから権限を剥奪します。
たとえば、GRANT を使用すると、特定のテーブルまたは複数のテーブルに対して SELECT、INSERT、UPDATE、および DELETE を実行する権限をユーザーに付与できます。
REVOKE コマンドは、権限を取り戻す (デフォルト) か、要件に基づいて UPDATE や DELETE などの特定のコマンドを取り消すために使用されます。
例
Employeeに対するSELECT 、INSERT 、UPDATE 、DELETE権限をUser1に付与する
従業員に対するユーザー1へのINSERTを取り消す
ユーザー1への従業員の更新を拒否
最初のケースでは、GRANT によって、ユーザー User1 に、employees というテーブルで SELECT、INSERT、UPDATE、および DELETE を実行する権限が付与されました。
このコマンドで REVOKE を実行すると、権限をデフォルトに戻すことができます。この場合は、ユーザー User1 の employees テーブルに対するコマンド INSERT を取り戻します。
DENY は特定のコマンドです。すべてのユーザーには拒否または付与される権限のリストがあるため、DENY コマンドはデータベース オブジェクトに対する一部の権限を明示的に禁止するために存在します。
Oracle データベース
Oracle データベースは、 SQL コマンドをさまざまなタイプに分類します。
- データ定義言語 (DDL) ステートメント
- データ操作言語 (DML) ステートメント
- トランザクション制御ステートメント
- セッション制御ステートメント
- システム制御ステートメント
- 埋め込みSQL文
詳細についてはOracle- [3] TCLを 参照
データ定義言語 (DDL) ステートメントを使用すると、次のタスクを実行できます。
- スキーマオブジェクトの作成、変更、削除
- 権限とロールの付与と取り消し
- テーブル、インデックス、またはクラスターに関する情報を分析する
- 監査オプションを確立する
- データ辞書にコメントを追加する
したがって、Oracle データベース DDL コマンドには、実際には Microsoft SQL サーバーのデータ制御言語の一部である権限 の付与と取り消しが含まれます。
Oracle データベースでの grant および revoke の構文:
例
db1 . Employeeに対してSELECT 、INSERT 、UPDATE 、DELETE権限をuser1に付与します。
db1のSELECT 、INSERT 、UPDATE 、DELETEを取り消します。user1のEmployee ;
Oracle のトランザクション制御文
トランザクション制御ステートメントは、DML ステートメントによって行われた変更を管理します。トランザクション制御ステートメントは次のとおりです。
- 専念
- ロールバック
- セーブポイント
- トランザクションの設定
- 制約の設定
マイグレーション
MySQLサーバーではSQL文を異なるタイプの文に分割します
- データ定義ステートメント
- データ操作ステートメント
- トランザクションおよびロックステートメント
- レプリケーションステートメント
- 準備された声明
- 複合文の構文
- データベース管理ステートメント
- ユーティリティステートメント
詳細についてはMySQLのトランザクションステートメント[4]を参照してください。
grant、revoke 構文は、データベース管理ステートメント - アカウント管理システムの一部です。
GRANT ステートメントを使用すると、システム管理者は権限とロールを付与でき、これらはユーザー アカウントとロールに付与できます。次の構文制限が適用されます。
- GRANT では、同じステートメントで権限とロールの両方を付与することはできません。 特定の GRANT ステートメントでは、権限またはロールのいずれかを付与する必要があります。
- ON 句は、ステートメントが権限を付与するかロールを付与するかを区別します。
- ONの場合、この文は権限を付与します
- ON がない場合、ステートメントはロールを付与します。
- アカウントに権限とロールの両方を割り当てることは許可されていますが、付与する内容に適した構文を持つ個別の GRANT ステートメントを使用する必要があります。
REVOKE ステートメントを使用すると、システム管理者は、ユーザー アカウントとロールから取り消すことができる権限とロールを取り消すことができます。
例
* . *の'jeffrey' @'localhost'からの挿入を取り消します。
' user1' @'localhost' 、'user2' @'localhost'から'role1' 、'role2'を取り消します。
worldのSELECT を取り消します。* FROM 'role3' ;
db1のすべての権限を'jeffrey' @'localhost'に付与します。
'role1' 、'role2' を'user1' @'localhost' 、'user2' @'localhost'に付与します。
'role3'にworld . *のSELECT権限を付与します。
PostgreSQLでは、 DCL の実行はトランザクションであり、ロールバックできます。
GrantとRevokeは、データベース内のユーザーに付与される権限を制御するために使用されるSQLコマンドです。
SQLite にはユーザー名やログインがないため、DCL コマンドはありません。代わりに、SQLite はファイルシステムの権限に依存して、データベースを開いてアクセスできるユーザーを定義します。[5]
参照
参考文献
- ^ 「SQL 標準 – ISO/IEC 9075:2016 (ANSI X3.135) – ANSI ブログ」。ANSIブログ。2018 年 10 月 5 日。2020年 9 月 19 日に閲覧。
- ^ 「TechNet Wiki」。social.technet.microsoft.com 。2020年9月19日閲覧。
- ^ 「データベース SQL 言語リファレンス」。docs.oracle.com。2020年 9 月 19 日閲覧。
- ^ 「MySQL :: MySQL 8.0 リファレンスマニュアル :: 13.7.1 アカウント管理ステートメント」。dev.mysql.com 。2020年9月19日閲覧。
- ^ Kreibich, JA、2010 年。SQLite の使用、O'Reilly。
