CREATE VIEW¶
概要¶
CREATE [ OR REPLACE ] VIEW view_name
[ SECURITY { DEFINER | INVOKER } ]
AS query
説明¶
SELECTクエリに対する新しいビューを作成します。ビューは、将来のクエリで参照できる論理的なテーブルです。ビューにはデータは含まれていません。代わりに、ビューによって格納されたクエリは、ビューが別のクエリによって参照されるたびに実行されます。
オプションのOR REPLACE
句は、ビューが既に存在する場合はエラーを発生させるのではなく、ビューを置き換えます。
セキュリティ¶
デフォルトのDEFINER
セキュリティモードでは、ビューで参照されるテーブルは、クエリを実行するユーザーではなく、ビューの所有者(ビューの作成者または定義者)の権限を使用してアクセスされます。これにより、クエリユーザーが直接アクセスすることを許可されていない可能性のある基になるテーブルへのアクセスを制限できます。current_user
関数はビューの所有者ではなくクエリユーザーを返し、したがって行を除外したり、ビューにアクセスしているユーザーに基づいてアクセスを制限するために使用できます。
INVOKER
セキュリティモードでは、ビューで参照されるテーブルは、クエリユーザー(ビューの呼び出し元)の権限を使用してアクセスされます。このモードで作成されたビューは、単なる保存されたクエリです。
default-view-security-mode
を使用して、ビュー作成のデフォルトセキュリティモードを設定できます。
例¶
orders
テーブル上のシンプルなビューtest
を作成する
CREATE VIEW test AS
SELECT orderkey, orderstatus, totalprice / 2 AS half
FROM orders
orders
を要約するビューorders_by_date
を作成する
CREATE VIEW orders_by_date AS
SELECT orderdate, sum(totalprice) AS price
FROM orders
GROUP BY orderdate
既存のビューを置き換えるビューを作成する
CREATE OR REPLACE VIEW test AS
SELECT orderkey, orderstatus, totalprice / 4 AS quarter
FROM orders
デフォルトのビューセキュリティモードをINVOKER
に設定する
SET SESSION default_view_security_mode='INVOKER'