【Oracle】ロール、権限設定

SYS権限でログイン

※「as sysdba」をつける必要あり

sqlplus sys/{パスワード}@{ネットサービス名} as sysdba

--oracleインストールユーザーかつ、OS認証が有効の場合
sqlplus / as sysdba

PDBに接続

--PDB確認
SELECT NAME, OPEN_MODE FROM v$pdbs;

--PDBに接続
ALTER SESSION SET CONTAINER = {PDB名};

権限を確認

※確認したいユーザーでログインして実行すること
※USERをDBAにするとデータベース内のすべてを参照

--ロール
SELECT * FROM USER_ROLE_PRIVS;
--システム権限
SELECT * FROM USER_SYS_PRIVS;
--オブジェクト権限
SELECT * FROM USER_TAB_PRIVS;

ロール付与

※ロールとは権限をまとめたもの

GRANT {権限} TO {ユーザー名};

GRANT CONNECT TO {ユーザー名};  --データベース接続用ロール
--含まれる権限(バージョン10g以降)
--CREATE SESSION  データベース接続権限

GRANT RESOURCE TO {ユーザー名};  --開発者用ロール
--含まれる権限
--CREATE CLUSTER  クラスターを作成する権限
--CREATE INDEXTYPE  インデックスタイプを作成する権限
--CREATE OPERATOR  演算子を作成する権限
--CREATE PROCEDURE  ストアドプロシージャ、ファンクション、パッケージを作成する権限
--CREATE SEQUENCE  シーケンスを作成する権限
--CREATE TABLE  テーブルを作成する権限
--CREATE TRIGGER  トリガーを作成する権限
--CREATE TYPE  オブジェクト型やコレクション型を作成する権限

GRANT EXP_FULL_DATABASE TO {ユーザー名};  --エクスポート用ロール
--含まれる権限
--SELECT ANY TABLE  任意のテーブルからデータを選択する権限
--BACKUP ANY TABLE  任意のテーブルをバックアップする権限
--ADMINISTER DATABASE TRIGGER  データベーストリガーを管理する権限

GRANT IMP_FULL_DATABASE TO {ユーザー名};  --インポート用ロール
--含まれる権限
--ALTER ANY TABLE  任意のテーブルを変更する権限
--ALTER ANY PROCEDURE  任意のプロシージャを変更する権限
--CREATE ANY TABLE  任意のスキーマにテーブルを作成する権限
--CREATE ANY INDEX  任意のスキーマにインデックスを作成する権限
--CREATE ANY PROCEDURE  任意のスキーマにプロシージャを作成する権限
--CREATE ANY SEQUENCE  任意のスキーマにシーケンスを作成する権限
--CREATE ANY TRIGGER  任意のスキーマにトリガーを作成する権限
--CREATE ANY VIEW  任意のスキーマにビューを作成する権限
--DROP ANY TABLE  任意のテーブルを削除する権限
--INSERT ANY TABLE  任意のテーブルにデータを挿入する権限
--UPDATE ANY TABLE  任意のテーブルのデータを更新する権限
--DELETE ANY TABLE  任意のテーブルからデータを削除する権限
--EXECUTE ANY PROCEDURE  任意のプロシージャを実行する権限

--ロールの中身を確認
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE = '{ロール名}';

権限付与

※ANYを省くと自スキーマのみ対象になる

GRANT {権限} TO {ユーザー名};

--基本系
GRANT CREATE SESSION TO {ユーザー名};  --データベース接続権限
GRANT UNLIMITED TABLESPACE TO {ユーザー名};--すべての表領域に対し、無制限の領域割り当て
--操作系
GRANT SELECT ANY TABLE TO {ユーザー名};  --Select
GRANT INSERT ANY TABLE TO {ユーザー名};  --Insert
GRANT DELETE ANY TABLE TO {ユーザー名};  --Delete
GRANT UPDATE ANY TABLE TO {ユーザー名};  --Update
--作成系
GRANT CREATE ANY TABLE TO {ユーザー名};  --テーブル
GRANT CREATE ANY VIEW TO {ユーザー名};  --ビュー
GRANT CREATE ANY MATERIALIZED VIEW TO {ユーザー名};  --マテビュー
GRANT CREATE ANY PROCEDURE TO {ユーザー名};  --プロシージャ
GRANT CREATE ANY SEQUENCE TO {ユーザー名};  --シーケンス
GRANT CREATE ANY SYNONYM TO {ユーザー名};  --シノニム
GRANT CREATE ANY INDEX TO {ユーザー名};  --インデックス
--削除系
GRANT DROP ANY TABLE TO {ユーザー名};  --テーブル
GRANT DROP ANY VIEW TO {ユーザー名};  --ビュー
GRANT DROP ANY MATERIALIZED VIEW TO {ユーザー名};  --マテビュー
GRANT DROP ANY PROCEDURE TO {ユーザー名};  --プロシージャ
GRANT DROP ANY SEQUENCE TO {ユーザー名};  --シーケンス
GRANT DROP ANY SYNONYM TO {ユーザー名};  --シノニム
GRANT DROP ANY INDEX TO {ユーザー名};  --インデックス
--変更系
GRANT ALTER ANY TABLE TO {ユーザー名};  --テーブル
GRANT ALTER ANY VIEW TO {ユーザー名};  --ビュー
GRANT ALTER ANY MATERIALIZED VIEW TO {ユーザー名};  --マテビュー
GRANT ALTER ANY PROCEDURE TO {ユーザー名};  --プロシージャ
GRANT ALTER ANY SEQUENCE TO {ユーザー名};  --シーケンス
GRANT ALTER ANY SYNONYM TO {ユーザー名};  --シノニム
GRANT ALTER ANY INDEX TO {ユーザー名};  --インデックス○
--実行系
GRANT EXECUTE ANY PROCEDURE TO {ユーザー名}; --プロシージャ

権限剥奪

REVOKE {権限} FROM {ユーザ名};