hagino3000's blog

平成アーカイブス (更新停止)

開発用ユーザ、表領域、ロール、プロファイルの作成

DB作成からの続き
http://d.hatena.ne.jp/hagino_3000/20071116/1195232128

開発用データベースを作成した所から
開発者用の共用DBにユーザを作成する所まで

一応セキュリティに配慮しておく

アドバイザの言うとおりに本番でありえない危険な権限は剥奪しておく。
必要な場合はユーザ単位で権限付与してやればOK。

revoke execute on UTL_FILE    from public;
revoke execute on UTL_HTTP    from public;
revoke execute on UTL_SMTP    from public;
revoke execute on DBMS_RANDOM from public;
revoke execute on UTL_TCP     from public;

表領域の作成

開発用なので適当に、AUTOEXTENTにしておくと楽、
空きディスク容量が少ない場合はしないけど。

ここでは表領域名をPROJECTX_DEVとしています。

create tablespace "PROJECTX_DEV"
    logging 
    datafile 'D:\ORACLE\ORADATA\[SID]\PROJECTX_DIV.ora' size 500M
    extent management local segment space management  AUTO 
/

ユーザの作成

デフォルト表領域は上で作った奴を指定する。
ユーザ名:yukiho、パスワード:imas の例

create user YUKIHO
    identified by IMAS
    default tablespace PROJECTX_DEV
    temporary tablespace TEMP
/

grant UNLIMITED TABLESPACE to yukiho
/

クォータの指定が面倒なのでUNLIMITED TABLESPACEシステム権限を付与してます。

ロール作成

スキーマを増やすときに楽なので、権限は直接ユーザに付与しないで
ロールに付与する。*1

create role "DEVELOPER"
/

-- 必要なシステム権限を付与
grant CREATE SESSION        to DEVELOPER;
grant CREATE CLUSTER        to DEVELOPER;
grant CREATE INDEXTYPE      to DEVELOPER;
grant CREATE OPERATOR       to DEVELOPER;
grant CREATE PROCEDURE      to DEVELOPER;
grant CREATE SEQUENCE       to DEVELOPER;
grant CREATE TABLE          to DEVELOPER;
grant CREATE TRIGGER        to DEVELOPER;
grant CREATE TYPE           to DEVELOPER;
grant SELECT ANY DICTIONARY to DEVELOPER;

-- 作ったユーザにロールを付与する。
grant DEVELOPER to YUKIHO
/

プロファイルの作成

開発中は途方も無いクエリが実行されることもしばしばあるので
リソースリミットをかけておくと安全。
他のプロジェクトと開発サーバを共用してたりする場合は特に。*2

プロファイルのリソース制限を有効化するために、パラメータを変更してやる。

alter system set resource_limit=true scope=both
/


プロファイルを作成してユーザに割り当て

CREATE PROFILE "DEVELOPER" LIMIT
CPU_PER_SESSION              36000
CPU_PER_CALL                  6000 -- CPU時間60秒以上で中断
CONNECT_TIME                   720 -- 接続12時間で切断
IDLE_TIME                       60 -- 1時間のアイドルで切断
SESSIONS_PER_USER        UNLIMITED -- 共用ユーザなので制限無し
LOGICAL_READS_PER_SESSION  5000000 -- データブロック単位
LOGICAL_READS_PER_CALL     1000000 -- データブロック単位
PRIVATE_SGA              UNLIMITED
COMPOSITE_LIMIT          UNLIMITED
/

alter user YUKIHO profile DEVELOPER
/

CONNECT_TIMEとIDOLE_TIMEはゾンビセッションを夜間に殺すための設定です。
勤務時間に合わせて設定しておくのが望ましいかと。


LOGICAL_READS_PER_CALLは結合条件を書き忘れて巨大なテーブルを検索した場合(うっかりクロスジョイン)に発動してくれればいいなぁ、という気持ちで。
設定値がTEMP表領域より大きいと、先にTEMP表領域を食いつぶしてしまってエラーになります。

*1:9iの時はCONNECTとRESOURCEロールを使っていたが、10gからは非推奨になったのでロールを自作してます

*2:プロファイルの使い方について言及しているサイトが少ないのは何故だろう・・・、あまり使われていない???私も使い出したのつい最近ですが