#DB(ORACLE)についての権限の参照など
##対象の人
・未経験でSE、PGになって1~2年目のかた
・現場でDMLしか書いたことがない方
・ORACLE以外のDBしか触ったことのないかた
##権限について
DBにはユーザーごとに権限が設定されている。
権限が付与されていることしか実行できない。
すべての権限が付与されている「SYS」ユーザーを乱用してしまうと、
様々な人が参照できてしまうため、情報漏洩につながってしまう可能性がある。
そのため、ユーザーをそれぞれ機能やシステムごとに作成し、必要な権限のみ付与するようにする。
##権限の種類
###主要なシステム権限
システム権限名 | 権限により許可される操作 |
---|---|
ALTER DATABASE | データベースの変更 |
CREATE TABLE | 自分のスキーマ内でのテーブルの作成 |
CREATE ANY TABLE | 任意のスキーマ内でのテーブルの作成 |
ALTER ANY TABLE | 任意のスキーマ内のテーブルまたはビューの変更 |
DROP ANY TABLE | 任意のスキーマ内ののテーブルまたは表パーティションの削除または切り捨て |
SELECT ANY TABLE | 任意のスキーマ内のテーブル、ビューまたはマテリアライズド・ビューの問い合わせ |
CREATE ANY INDEX | 任意のスキーマ内のテーブルに対する索引の作成 |
ALTER ANY INDEX | 任意のスキーマの索引の変更 |
DROP ANY INDEX | 任意のスキーマの索引の削除 |
CREATE USER | ユーザーの作成 |
ALTER USER | ユーザーの変更 |
DROP USER | ユーザーの削除 |
CREATE SESSION | データベースへの接続 |
主要なオブジェクト権限
オブジェクト | オブジェクト権限名 | 権限により許可される操作 |
---|---|---|
テーブル | SELECT | 該当テーブルへ問い合わせ(SELECT文) |
テーブル | UPDATE | 該当テーブルのデータ変更(UPDATE文) |
テーブル | INSERT | 該当テーブルへの新しい行の追加(INSERT文) |
テーブル | DELETE | 該当テーブルの行の削除 |
テーブル | ALTER | 該当テーブルの定義の変更 |
ビュー | SELECT | 該当テーブルへ問い合わせ(SELECT文) |
ビュー | UPDATE | 該当テーブルのデータ変更(UPDATE文) |
ビュー | INSERT | 該当テーブルへの新しい行の追加(INSERT文) |
ビュー | DELETE | 該当テーブルの行の削除 |
###権限を付与する/取り消す GRANT文/REVOKE文
GRANT <権限> TO <USER名>;
REVOKE <権限> FROM <USER名>;
###他ユーザーのテーブルついて
ユーザーごとに作成したテーブルにアクセスできるのは、基本的にそのユーザーだけである。
ほかのユーザーから参照する場合は、そのユーザーに対しての権限の付与が必要である。
権限がある場合、は対象のスキーマ≒スキーマ(厳密には違う)をDMLのテーブル名の前につけることにより参照することができる。
SELECT * FROM <スキーマ名>.<テーブル名>
##ビューとマテリアライズドビューについて
###ビュー
ビューとはあらかじめ複雑なSELECT文をビューとして定義しておき、
参照を簡単にするもの。
たとえば、
・サブクエリが何重にも必要になってしまう
・参照するテーブルが多い
などの場合に用いる。
CREATE VIEW <ビュー名> AS <実表へのSELECT文>
###マテリアライズドビューについて
ビューの内容を一回一回検索するのではなく、保存しておくことにより
複雑なものでも高速で検索することができる。
データに変更が出た場合は更新(リフレッシュ)が必要になるが、
その場合もデータに変更がでている個所のみを更新できるため、高速での処理が可能。
下記のは一例なので、詳細は以下のページを参照
CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW <マテビューの名前>
REFRESH <リフレッシュ方法>
AS <SELECT文>
####リフレッシュ方法について
リフレッシュ方法には何種類かある。
更新方法 | 別名 | 説明 |
---|---|---|
complete | 完全リフレッシュ | 保持していたデータを全削除し、再検索したSQLの結果を保持する |
fast | 高速リフレッシュ | 前回リフレッシュ時点から更新のあった箇所のみを再検索する |
force | デフォルト | 高速リフレッシュが実行できるSQLであれば高速リフレッシュを実行し、不可能であれば完全リフレッシュを実行する |
fastにするためには、マテリアライズドビューログの作成が必要
CREATE MATERIALIZED VIEW LOG ON <マテビューの名前>
WITH SEQUENCE, ROWID
(<集計テーブルのPK>, <集計テーブルのPK>・・・)
INCLUDING NEW VALUES;
###ビューおよびマテビューの参照
テーブルと同様にSELECTすれば参照可能
SELECT * FROM <ビューの名前>