コンテンツにスキップ

USER/AUTH

ユーザーの作成・削除・パスワード変更、権限の付与・取り消し、公開鍵を使用するAUTH KEYの管理構文です。


CREATE USER

create_user_stmt ::=
    'CREATE USER' user_name 'IDENTIFIED BY' password
    [ 'PASSWORD POLICY' ( 'NONE' | 'LOW' | 'HIGH' ) ]
    [ 'WITH AUTH KEY' '(' auth_key_spec ')' ]

auth_key_spec ::=
    "key='" pem_public_key "',"
    "valid_before='" YYYY-MM-DD "',"
    "comment='" text "'"

ユーザー名は保存時に大文字へ変換します。

-- 基本的なユーザー作成
CREATE USER app_user IDENTIFIED BY 'App#1234';

-- パスワードポリシーの指定
CREATE USER ops_user IDENTIFIED BY 'Ops@Strong1' PASSWORD POLICY HIGH;

-- AUTH KEYとともに作成(公開鍵認証)
CREATE USER app_user IDENTIFIED BY 'App#1234'
WITH AUTH KEY (
    key='-----BEGIN PUBLIC KEY-----\nMFkw...(省略)...==\n-----END PUBLIC KEY-----\n',
    valid_before='2047-12-31',
    comment='initial key'
);

パスワードポリシー

ポリシー説明
NONE強度の制約なし。有効期限なし
LOW10文字以上、大文字・小文字・特殊文字を含む。連続する数字・キーボード配列のパターンは禁止
HIGHLOWの規則 + 直近24個のパスワードの再利用禁止 + 90日で自動失効

DROP USER

drop_user_stmt ::= 'DROP USER' user_name

SYSユーザーは削除できません。対象ユーザーが作成したテーブルが残っている場合はエラーになります。

別の管理者セッションがユーザーを削除しても、既存のアクティブセッションは即座には終了しません。新規接続は 失敗し、既存セッションはログイン時のユーザー名とIDを保持します。運用手順はアカウント管理を、 確認関数はユーザーコンテキスト関数を参照してください。

DROP USER old_user;

ALTER USER

-- パスワードの変更
alter_user_pwd_stmt ::=
    'ALTER USER' user_name 'IDENTIFIED BY' new_password
    [ 'PASSWORD POLICY' ( 'NONE' | 'LOW' | 'HIGH' ) ]

ポリシーのみを変更する構文は許可しません。ポリシーを変更する場合は、必ず新しいパスワードも指定してください。

-- パスワードの変更
ALTER USER app_user IDENTIFIED BY 'NewPass#456';

-- パスワードとポリシーを同時変更
ALTER USER app_user IDENTIFIED BY 'NewPass#456' PASSWORD POLICY HIGH;

CONNECT

user_connect_stmt ::= 'CONNECT' user_name '/' password

アプリケーションを終了せず、別のユーザーで再接続します。

CONNECT app_user/App#1234;

GRANT / REVOKE

grant_stmt  ::= 'GRANT'  priv_list 'ON' object_ref 'TO'   user_name
revoke_stmt ::= 'REVOKE' priv_list 'ON' object_ref 'FROM' user_name

priv_list  ::= priv_value ( ',' priv_value )*
object_ref ::= 'DATABASE' database_name
             | 'TABLE' ['database_name.'] owner_name '.' table_name
             | ['database_name.'] owner_name '.' table_name

テーブル権限

-- テーブルのDML権限
GRANT SELECT ON sensor_log TO reader;
GRANT SELECT, INSERT ON sys.sensor_log TO writer;
GRANT ALL ON sys.sensor_log TO app_user;

-- 権限の取り消し
REVOKE INSERT ON sys.sensor_log FROM writer;
REVOKE ALL ON sys.sensor_log FROM app_user;

テーブル権限の種類: SELECT, INSERT, DELETE, UPDATE, ALL

データベース権限(Machbase 8.5以降)

-- DDL権限(CREATE + DROP)
GRANT DDL ON DATABASE factory_a TO deploy_user;

-- 個別のDDL権限
GRANT CONNECT ON DATABASE factory_a TO app_user;
GRANT CREATE ON DATABASE factory_a TO create_user;
GRANT DROP   ON DATABASE factory_a TO drop_user;
GRANT ALTER  ON DATABASE factory_a TO ops_user;

-- 運用権限
GRANT BACKUP ON DATABASE factory_a TO backup_user;
GRANT MOUNT  ON DATABASE MACHBASEDB TO mount_user;
GRANT USAGE  ON DATABASE factory_a_backup TO report_user;

-- すべてのデータベース権限
GRANT ALL ON DATABASE factory_a TO admin_user;

-- 権限の取り消し
REVOKE BACKUP ON DATABASE factory_a FROM backup_user;

データベース権限の種類: CONNECT, CREATE, DROP, ALTER, BACKUP, MOUNT, USAGE, DDL(CREATE+DROP), ALL(CONNECT+CREATE+DROP+ALTER+BACKUP)

データベース権限が必要な操作

操作必要な権限
CREATE/DROP TABLE, VIEW, INDEX, ROLLUP, TABLESPACE, RETENTIONCREATEDROP、またはDDL
ALTER SYSTEMALTER
BACKUP DATABASEBACKUP
MOUNT/UMOUNT DATABASEMOUNT

ユーザー作成時のデフォルト権限

新規ユーザーはデフォルトでSELECTINSERTDELETEUPDATECREATEDROP権限を持ちます。 ALTERMOUNTBACKUPは明示的に付与してください。


AUTH KEY管理

AUTH KEYは、パスワードの代わりに公開鍵によるチャレンジ認証を使用するため、Machbaseに登録する公開鍵です。

対応するアルゴリズム

アルゴリズム対応するパラメーター署名方式
ECDSAP-256, P-384, P-521ECDSA
RSA2048, 3072, 4096 bitsRSA_PKCS1_V15, RSA_PSS

鍵ファイルの生成(openssl)

# ECDSA P-256鍵の生成
openssl ecparam -name prime256v1 -genkey -noout -out app_user.key
openssl ec -in app_user.key -pubout -out app_user.pub
chmod 600 app_user.key

# RSA 2048-bit鍵の生成
openssl genrsa -out app_user_rsa.key 2048
openssl rsa -in app_user_rsa.key -pubout -out app_user_rsa.pub
chmod 600 app_user_rsa.key

# PEMをSQLインライン形式へ変換(改行を\nにする)
awk '{printf "%s\\n", $0}' app_user.pub

AUTH KEYの追加

alter_user_add_auth_key_stmt ::=
    'ALTER USER' user_name 'ADD AUTH KEY' '(' auth_key_spec ')'

auth_key_spec ::=
    "key='" pem_public_key "',"
    "valid_before='" YYYY-MM-DD "',"
    "comment='" text "'"
ALTER USER app_user ADD AUTH KEY (
    key='-----BEGIN PUBLIC KEY-----\nMFkw...(省略)...==\n-----END PUBLIC KEY-----\n',
    valid_before='2047-12-31',
    comment='primary key'
);

追加した鍵は直ちに有効な状態(ACTIVATED=1)で登録されます。

AUTH KEYの有効化 / 無効化

alter_user_activate_key_stmt   ::= 'ALTER USER' user_name 'ACTIVATE AUTH KEY ID'   key_id
alter_user_deactivate_key_stmt ::= 'ALTER USER' user_name 'DEACTIVATE AUTH KEY ID' key_id
ALTER USER app_user DEACTIVATE AUTH KEY ID 3;
ALTER USER app_user ACTIVATE AUTH KEY ID 3;

AUTH KEYの有効期間変更

alter_user_alter_key_stmt ::=
    'ALTER USER' user_name 'ALTER AUTH KEY ID' key_id
    "VALID_BEFORE='" YYYY-MM-DD "'"
ALTER USER app_user ALTER AUTH KEY ID 3 VALID_BEFORE='2048-06-30';

AUTH KEYの削除

alter_user_drop_key_stmt ::=
    'ALTER USER' user_name 'DROP AUTH KEY ID' key_id
ALTER USER app_user DROP AUTH KEY ID 3;

AUTH KEYの参照

SELECT key_id, user_name, key_algo, key_param, activated, valid_before, comment
  FROM V$USER_AUTH_KEYS
 WHERE user_name = 'APP_USER'
 ORDER BY key_id;

V$USER_AUTH_KEYSの主な列: KEY_ID, USER_NAME, KEY_ALGO, KEY_PARAM, ACTIVATED, VALID_AFTER, VALID_BEFORE, COMMENT, PUBKEY


関連ドキュメント

最終更新日