様々な基本になるサンプルを記録しています。

不定期更新です。

記事のサイドに使用している商品の紹介も掲載しているので、良ければご覧ください。

【Oracle】簡易的にユーザーを作成

DBA権限持ってるユーザーから実行しないとできないと思うけど、
とりあえずユーザーを作成する動的SQLを載せておこうと思う。
権限設定とかいろいろ面倒なので、テスト環境で実行するときなどは考えなくて済むのではないかと思う。

CREATE OR REPLACE PROCEDURE USER_CREATE (
    USER_NAME    IN VARCHAR2,
    USER_SPACE   IN VARCHAR2 DEFAULT 'USERS',
    TEMP_SPACE   IN VARCHAR2 DEFAULT 'TEMP',
    OUT_STS      OUT VARCHAR2
) AS

/*改行*/
    WCRLF   VARCHAR2(4) := CHR(13)
                            || CHR(10);
BEGIN
    OUT_STS   := 'CREATE USER '
               || USER_NAME
               || ' '
               || WCRLF
               || 'IDENTIFIED BY '
               || USER_NAME
               || ' '
               || WCRLF
               || 'DEFAULT TABLESPACE '
               || USER_SPACE
               || ' '
               || WCRLF
               || 'TEMPORARY TABLESPACE '
               || TEMP_SPACE
               || ' '
               || WCRLF
               || 'PROFILE DEFAULT';

/*ユーザー*/
    EXECUTE IMMEDIATE 'CREATE USER '
                      || USER_NAME
                      || ' '
                      || WCRLF
                      || 'IDENTIFIED BY '
                      || USER_NAME
                      || ' '
                      || WCRLF
                      || 'DEFAULT TABLESPACE '
                      || USER_SPACE
                      || ' '
                      || WCRLF
                      || 'TEMPORARY TABLESPACE '
                      || TEMP_SPACE
                      || ' '
                      || WCRLF
                      || 'PROFILE DEFAULT';

/*権限*/
    EXECUTE IMMEDIATE 'GRANT DBA TO '
                      || USER_NAME
                      || ' WITH ADMIN OPTION';
    EXECUTE IMMEDIATE 'GRANT RESOURCE TO '
                      || USER_NAME
                      || ' WITH ADMIN OPTION';
    EXECUTE IMMEDIATE 'GRANT CREATE ANY TABLE TO '
                      || USER_NAME
                      || ' WITH ADMIN OPTION';
    EXECUTE IMMEDIATE 'GRANT CREATE ANY TRIGGER TO '
                      || USER_NAME
                      || ' WITH ADMIN OPTION';
    EXECUTE IMMEDIATE 'GRANT CREATE USER TO '
                      || USER_NAME
                      || ' WITH ADMIN OPTION';
    EXECUTE IMMEDIATE 'GRANT UNLIMITED TABLESPACE TO '
                      || USER_NAME
                      || ' WITH ADMIN OPTION';
END USER_CREATE;

余談だけど、Oracle 12cではデフォルトでパスワードの有効期限が180日になっているらしい。
それを調べる方法を載せておこう

SELECT * FROM DBA_PROFILES
WHERE RESOURCE_NAME = 'PASSWORD_LIFE_TIME';

必要であれば無期限、有効期限を設定するSQL

--パスワードの有効期限を無期限にする
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

--パスワードの有効期限を500日にする 
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 500;