【Oracle】ロール、権限設定

SYS権限でログイン

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

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

権限を確認

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

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

ロール付与

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

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

GRANT CONNECT TO {ユーザー名};  --一般ユーザー用のシステム権限(CREATE TABLE等)
GRANT RESOURCE TO {ユーザー名};  --開発者のシステム権限(CREATE TRIGGER等)
GRANT EXP_FULL_DATABASE TO {ユーザー名};  --エクスポート権限
GRANT IMP_FULL_DATABASE TO {ユーザー名};  --インポート権限

--ロールの中身を確認
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 {ユーザ名};