ユーザー管理
目次
- CREATE USER
- DROP USER
- ALTER USER
- PASSWORD POLICY
- AUTH KEY ファイルの生成
- AUTH KEY 付きユーザーの作成
- AUTH KEY の管理
- AUTH KEY メタデータの検索
- CONNECT
- GRANT/REVOKE
- ユーザー管理の例
CREATE USER
create_user_stmt:

create_user_stmt ::= 'CREATE USER' user_name 'IDENTIFIED BY' passwordユーザーを作成する構文です。
-- 例
CREATE USER new_user IDENTIFIED BY passwordパスワードポリシーも同時に指定する場合は、次の拡張構文を使用します。
CREATE USER user_name IDENTIFIED BY password PASSWORD POLICY { NONE | LOW | HIGH }例:
CREATE USER app_user IDENTIFIED BY "Aa!StrongPwd1" PASSWORD POLICY LOW;
CREATE USER ops_user IDENTIFIED BY "Bb@StrongPwd2" PASSWORD POLICY HIGH;ユーザー名は作成時に大文字へ変換されます。例えば
CREATE USER app_user ... は、メタテーブルと V$ ビューで APP_USER として
保存、表示されます。その後の接続や権限の文でも、同じユーザー名を参照します。
DROP USER
drop_user_stmt:

drop_user_stmt ::= 'DROP USER' user_nameユーザーを削除します。SYS は削除できません。対象ユーザーが作成したテーブルが残っている場合もエラーになります。
-- 例
DROP USER old_userALTER USER
alter_user_pwd_stmt:

alter_user_pwd_stmt ::= 'ALTER USER' user_name 'IDENTIFIED BY' password次の構文でパスワードを変更します。
-- 例
ALTER USER user1 IDENTIFIED BY passwordポリシーも同時に変更できます。
ALTER USER user_name IDENTIFIED BY password PASSWORD POLICY { NONE | LOW | HIGH }ポリシーの変更には、新しいパスワードを一緒に指定します。ALTER USER user_name PASSWORD POLICY HIGH のように、ポリシーだけは変更できません。
PASSWORD POLICY
CREATE USER と ALTER USER ... IDENTIFIED BY ... で強度を検証します。省略時は互換性のため NONE になります。
ポリシーレベル:
NONE- 強度の制限なし。
- 有効期限
VALID_BEFOREはNULL。
LOW- 10 文字以上。
- 大文字、小文字、特殊文字を含むこと。
- 5 桁以上連続する数字、増加または減少する数字列、キーボード配列順の文字列は禁止。
- 有効期限
VALID_BEFOREはNULL。
HIGHLOWのすべての規則を適用。- 現在および直近 24 回のパスワードを再利用不可。
- 設定時から 90 日後を
VALID_BEFOREに設定。
ポリシーの例:
CREATE USER user1 IDENTIFIED BY "Aa!StrongPwd1";
CREATE USER user2 IDENTIFIED BY "Bb@StrongPwd2" PASSWORD POLICY LOW;
CREATE USER user3 IDENTIFIED BY "Cc#StrongPwd3" PASSWORD POLICY HIGH;
ALTER USER user2 IDENTIFIED BY "Dd$NewPwd44";
ALTER USER user2 IDENTIFIED BY "Ee%NewPwd55" PASSWORD POLICY LOW;
ALTER USER user3 IDENTIFIED BY "Ff#NewPwd66" PASSWORD POLICY NONE;注意事項:
- IDENTIFIED BY だけを指定すると、現在保存されているポリシーで検証します。
- PASSWORD POLICY も指定すると、新しいポリシーで検証します。
HIGHに変更した場合、またはHIGHのユーザーがパスワードを変更した場合、期限は現在から 90 日後になります。LOWまたはNONEに変更すると、期限はNULLになります。- 期限切れのアカウントはログインできず、自分でパスワードを変更できません。管理者からリセットしてください。
M$SYS_USERS でポリシーと期限を確認できます。
SELECT USER_ID, NAME, PWD_POLICY_LEVEL, VALID_BEFORE
FROM M$SYS_USERS;PWD_POLICY_LEVEL は 0 = NONE、1 = LOW、2 = HIGH です。VALID_BEFORE の値は YYYY-MM-DD 形式で表示されます。
AUTH KEY ファイルの生成
注意:以下は Machbase 8.5 以降でサポートされます。
AUTH KEY 認証は、クライアントの秘密鍵ファイルと、ユーザーに登録した公開鍵を
使用します。通常は openssl で鍵ペアを生成し、秘密鍵をクライアントに保管して、
公開鍵だけを Machbase に登録します。
対応するアルゴリズムと鍵サイズ:
| 公開鍵アルゴリズム | パラメーター | 署名方式 | ハッシュ |
|---|---|---|---|
ECDSA | P-256, P-384, P-521 | ECDSA | SHA-256 |
RSA | 2048、3072、4096 ビット | RSA_PKCS1_V15 | SHA-256 |
RSA | 2048、3072、4096 ビット | RSA_PSS | SHA-256 |
AUTH_SIG_SCHEME を省略すると、鍵アルゴリズムの既定方式を使用します。
ECDSA鍵:ECDSARSA鍵:RSA_PKCS1_V15
RSA-PSS を使用するには、接続オプションに AUTH_SIG_SCHEME=RSA_PSS を指定します。
登録済み公開鍵の型と要求する署名方式が一致しなければ、
認証に失敗します。
ECDSA P-256 の例:
openssl ecparam -name prime256v1 -genkey -noout -out app_user_ecdsa.key
openssl ec -in app_user_ecdsa.key -pubout -out app_user_ecdsa.pub
chmod 600 app_user_ecdsa.keyECDSA P-384 と P-521 の例:
openssl ecparam -name secp384r1 -genkey -noout -out app_user_ecdsa_p384.key
openssl ec -in app_user_ecdsa_p384.key -pubout -out app_user_ecdsa_p384.pub
openssl ecparam -name secp521r1 -genkey -noout -out app_user_ecdsa_p521.key
openssl ec -in app_user_ecdsa_p521.key -pubout -out app_user_ecdsa_p521.pubRSA 2048 ビットの例:
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上の app_user_rsa.pub は、-----BEGIN PUBLIC KEY----- の形式です。
PKCS#1 の -----BEGIN RSA PUBLIC KEY----- 形式で生成するには、
-RSAPublicKey_out を使用します。
openssl genrsa -out app_user_rsa.key 2048
openssl rsa -in app_user_rsa.key -RSAPublicKey_out -out app_user_rsa_pkcs1.pub
chmod 600 app_user_rsa.keyRSA 3072 または 4096 ビットでは、openssl genrsa の最後の引数に
3072 または 4096 を指定します。
公開鍵を SQL に埋め込む場合は、PEM の改行をエスケープして 1 つの SQL 文字列にします。
awk '{printf "%s\\n", $0}' app_user_ecdsa.pubコマンド出力を、CREATE USER ... WITH AUTH KEY または
ALTER USER ... ADD AUTH KEY の PUBKEY に指定します。
生成した公開鍵から登録 SQL ファイルを作成する例です。
KEY_ESCAPED=$(awk '{printf "%s\\n", $0}' app_user_ecdsa.pub)
cat > add_app_user_key.sql <<EOF
ALTER USER app_user ADD AUTH KEY (
PUBKEY = '${KEY_ESCAPED}',
VALID_BEFORE = '2047-12-31',
COMMENT = 'openssl generated ecdsa key'
);
EOFX.509 を登録する場合は、同じ秘密鍵で自己署名証明書を作成し、
その PEM を PUBKEY に指定します。認証時には、証明書ファイルではなく、
対応する秘密鍵ファイルを使用します。
openssl req -new -x509 \
-key app_user_ecdsa.key \
-out app_user_ecdsa.crt \
-days 3650 \
-subj "/CN=app_user"SQL に埋め込む際は、改行を \n に変換します。
CERT_ESCAPED=$(awk '{printf "%s\\n", $0}' app_user_ecdsa.crt)生成した証明書から登録 SQL ファイルを作る例です。
cat > create_app_x509.sql <<EOF
CREATE USER app_x509 IDENTIFIED BY 'App#1234'
WITH AUTH KEY (
PUBKEY = '${CERT_ESCAPED}',
VALID_BEFORE = '2036-07-12',
COMMENT = 'x509 certificate key'
);
EOFAUTH KEY 付きユーザーの作成
注意:Machbase 8.5 以降でサポートされます。
パスワード認証に加え、公開鍵チャレンジ認証用の AUTH KEY を 登録できます。
CREATE USER app_user IDENTIFIED BY 'App#1234'
WITH AUTH KEY (
PUBKEY = '-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEshxcrSmtosaqWjhRkOoAw4v3QWqL\ns3OFN2jbJrustEc12uAn/IdtTG94KK69bY7DWl80pzQ48dNL+ENXe8PT3g==\n-----END PUBLIC KEY-----\n',
VALID_BEFORE = '2047-12-31',
COMMENT = 'initial key'
);注意事項:
PUBKEYは PEM 公開鍵または X.509 証明書です。- 対応する PEM ブロックは次の 3 種類です。
-----BEGIN PUBLIC KEY-----:SPKI 形式のECDSAまたはRSA公開鍵-----BEGIN RSA PUBLIC KEY-----:PKCS#1 のRSA公開鍵-----BEGIN CERTIFICATE-----:X.509 証明書
- SQL 内では PEM の改行を
\nと書けます。 VALID_BEFOREはYYYY-MM-DD形式です。YYYY-MM-DD HH24:MI:SSのように、時刻を含む 値は指定できません。- 現在の構文では
COMMENTは必須です。 CREATE USER ... WITH AUTH KEYの最初の鍵は、 有効(ACTIVATED=1)として登録されます。- 1 ユーザーはパスワードと複数の AUTH KEY を持てます。
認証方式はクライアントの
AUTH_MODEが決定し、失敗時に 別の方式へ自動で切り替わることはありません。 ssh-rsa ...やecdsa-sha2-nistp256 ...の生の OpenSSH 公開鍵は 直接登録できません。先にssh-keygen -e -m PKCS8などで PEM 公開鍵に変換してください。
X.509 証明書を直接入力する例です。PEM 形式を示すための固定証明書です。
実際の認証では、上記 CERT_ESCAPED の例と同様に、
登録する証明書とクライアントの秘密鍵が同じ鍵ペアである
必要があります。
CREATE USER app_x509 IDENTIFIED BY 'App#1234'
WITH AUTH KEY (
PUBKEY = '-----BEGIN CERTIFICATE-----\nMIIBmDCCAT+gAwIBAgIUAOBEtntR9La6sDNPUeW6o4m+oBcwCgYIKoZIzj0EAwIw\nIjEgMB4GA1UEAwwXbWFjaGJhc2UtMzgwNS14NTA5LWF1dGgwHhcNMjYwNzE1MDEw\nMzAxWhcNMzYwNzEyMDEwMzAxWjAiMSAwHgYDVQQDDBdtYWNoYmFzZS0zODA1LXg1\nMDktYXV0aDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLIcXK0praLGqlo4UZDq\nAMOL90Fqi7NzhTdo2ya7rLRHNdrgJ/yHbUxveCiuvW2Ow1pfNKc0OPHTS/hDV3vD\n096jUzBRMB0GA1UdDgQWBBQZ2DHpG/e/fq7RI3Cm1Z78N7l4LDAfBgNVHSMEGDAW\ngBQZ2DHpG/e/fq7RI3Cm1Z78N7l4LDAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49\nBAMCA0cAMEQCIGSsnhbOFiJkhCCrKsut+cg5O2TVDfHUBgGXFeg7nS/7AiA9wVgn\no1LE0HTkPLZYt99uOXHZ7D3Ygbvo+VwJK1SoRg==\n-----END CERTIFICATE-----\n',
VALID_BEFORE = '2036-07-12',
COMMENT = 'x509 certificate key'
);X.509 を登録すると、Machbase は公開鍵を抽出して保存します。 証明書チェーンや CA の信頼性は検証しません。証明書は、 公開鍵と有効期限を持つ入力形式として扱います。PEM ブロックは 必ず 1 つだけにしてください。チェーン PEM、秘密鍵 PEM、生の OpenSSH 鍵、 未対応ヘッダー、有効な PEM の後に空白以外のテキストが続く入力は 拒否されます。
VALID_BEFORE は、証明書の notAfter より後には設定できません。
違反すると、登録または変更は失敗します。
AUTH KEY の管理
AUTH KEY の追加
ALTER USER app_user ADD AUTH KEY (
PUBKEY = '-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAqO+tddiAQzsT8iajPy5QJPamIlyq2zB01wgHSTs3OOrvw0uKoFQD\ncqKaDzRya73LETXIEev3nwhGCnG4SjedMHj3EH9/rRJphFtv/dzw0OHum/UhVulR\nIXUYzrTbKPTQ+qyjS8UXTteMncf9OOh4AQyS4+iJW+U344fxymR8USRgZ25N9jhf\n2gkKnn5YSPZHf8ZHQGeA7OXANBwPmH5dQwfqghXRa7Nk1hmkIAnQQXCBJW/Lin+x\nwQfqv8DVwNaiziz77voPwaeD5akq1JYWvcPlOnh+NN3tpu5gudke/t/In4NFJ3W9\n4unVcYIfxcdDSoht3AMObGmuDazOjQJFGQIDAQAB\n-----END RSA PUBLIC KEY-----\n',
VALID_BEFORE = '2048-01-31',
COMMENT = 'rollover candidate'
);追加した鍵は直ちに有効(ACTIVATED=1)になります。ローテーション中は
複数の有効な鍵を持てます。
AUTH KEY の有効化と無効化
ALTER USER app_user DEACTIVATE AUTH KEY ID 3;
ALTER USER app_user ACTIVATE AUTH KEY ID 3;- 無効化した鍵はチャレンジ認証に使用できません。
- 1 ユーザーが複数の鍵を持てます。
有効期限の変更
ALTER USER app_user ALTER AUTH KEY ID 3 VALID_BEFORE = '2048-06-30';VALID_BEFOREを過ぎた鍵は使用できません。YYYY-MM-DD形式で指定します。時刻を含む 値は指定できません。- X.509 から登録した鍵の期限は、証明書の
notAfterより後には変更できません。
AUTH KEY の削除
ALTER USER app_user DROP AUTH KEY ID 3;- 削除した鍵は、直ちに認証に使用できなくなります。
- ユーザーを削除すると、その AUTH KEY メタデータも削除されます。
AUTH KEY メタデータの検索
V$USER_AUTH_KEYS で確認できます。
主な列:
KEY_ID:鍵の識別子USER_NAME:所有者KEY_ALGO:RSAまたはECDSAKEY_PARAM:鍵のパラメーターRSA:2048などのビット長- EC:
P-256、P-384、P-521などの曲線名
ACTIVATED:有効かどうかVALID_AFTER、VALID_BEFORE:有効期間ADDITIONAL_INFO:サーバー生成のメタデータ- 公開鍵入力:
type=PUBLIC_KEY - 証明書入力:
type=CERTIFICATE; cert_not_after=YYYY-MM-DD
- 公開鍵入力:
COMMENT:ユーザーの注記PUBKEY:PEM 公開鍵の本体。証明書から登録した場合は、 抽出した公開鍵を保存します。
SELECT key_id, user_name, key_algo, key_param, activated,
valid_before, additional_info, comment
FROM V$USER_AUTH_KEYS
WHERE user_name='APP_USER'
ORDER BY key_id;公開鍵の本体は PUBKEY 列で取得します。
SELECT key_id, user_name, pubkey
FROM V$USER_AUTH_KEYS
WHERE user_name='APP_USER'
ORDER BY key_id;CONNECT
user_connect_stmt:

user_connect_stmt: 'CONNECT' user_name '/' passwordアプリケーションを終了せず、次の構文で別のユーザーとして再接続できます。
-- 例
CONNECT user1/password;GRANT/REVOKE



GRANT で権限を付与し、REVOKE で取り消します。
基本例:
-- user1 に mytable の SELECT を付与
GRANT SELECT ON mytable TO user1;
-- user1 に mytable の全権限を付与
GRANT ALL ON mytable TO user1;-- user1 の mytable に対する UPDATE を取り消す
REVOKE UPDATE ON mytable FROM user1;
-- user1 の mytable に対する全権限を取り消す
REVOKE ALL ON mytable FROM user1;テーブル権限
対象には次の形式を使用します。
tableuser.tabledb.user.table
利用できる権限:
SELECTINSERTDELETEUPDATEALL
例:
GRANT SELECT ON sensor_log TO reader;
GRANT SELECT, INSERT ON sys.sensor_log TO writer;
REVOKE INSERT ON sys.sensor_log FROM writer;
GRANT ALL ON machbasedb.sys.sensor_log TO app_user;Machbase 8.5 以降のデータベース権限
注意:Machbase 8.5 以降でサポートされます。
MACHBASEDB を対象に、データベース全体の権限を付与できます。
GRANT CREATE ON machbasedb TO ddl_user;
GRANT DROP ON machbasedb TO ddl_user;
GRANT ALTER ON machbasedb TO ops_user;
GRANT BACKUP ON machbasedb TO backup_user;
GRANT MOUNT ON machbasedb TO mount_user;
GRANT DDL ON machbasedb TO deploy_user;
GRANT ALL ON machbasedb TO admin_user;利用できる権限:
CREATEDROPALTERMOUNTBACKUPDDLALL
DDL は CREATE + DROP の組み合わせです。
ALL の意味
注意:以下は Machbase 8.5 以降の動作です。
ALL の意味は対象によって異なります。
GRANT ALL ON machbasedb TO user1- データベース全体のすべての権限を付与。
GRANT ALL ON sys.table1 TO user1- 指定テーブルのすべての DML 権限を付与。
同じ ALL でも、MACHBASEDB とテーブルでは役割が異なります。
MACHBASEDB に DML 権限は直接付与できない
注意:以下は Machbase 8.5 以降の動作です。
MACHBASEDB に SELECT、INSERT、DELETE、UPDATE を直接付与することはできません。
GRANT SELECT ON machbasedb TO user1;
GRANT INSERT ON machbasedb TO user1;
REVOKE DELETE ON machbasedb FROM user1;
REVOKE UPDATE ON machbasedb FROM user1;次のエラーになります。
[ERR-02186: Invalid database name.]読み書きの権限には、対象テーブルを指定してください。
GRANT SELECT ON sys.sensor_log TO user1;
GRANT INSERT ON sys.sensor_log TO user1;データベース対象には MACHBASEDB を使用
注意:以下は Machbase 8.5 以降の動作です。
データベース権限の対象は MACHBASEDB です。
GRANT BACKUP ON machbasedb TO backup_user;
REVOKE BACKUP ON machbasedb FROM backup_user;無効なデータベース名はエラーになります。
GRANT BACKUP ON typo TO backup_user;[ERR-02186: Invalid database name.]データベース権限が必要な操作
注意:以下は Machbase 8.5 以降の動作です。
次の操作には、テーブル権限ではなく MACHBASEDB の権限が必要です。
CREATE TABLE,DROP TABLECREATE VIEW,DROP VIEWCREATE INDEX,DROP INDEXCREATE ROLLUP,DROP ROLLUPCREATE TABLESPACE,DROP TABLESPACECREATE RETENTION,DROP RETENTIONALTER SYSTEMBACKUP DATABASEMOUNT DATABASE,UNMOUNT DATABASE
例えば一般ユーザーが CREATE VIEW を実行するには、MACHBASEDB に対する CREATE を付与します。
GRANT CREATE ON machbasedb TO user1;新規ユーザーの既定権限
次の権限を既定で付与します。
SELECTINSERTDELETEUPDATECREATEDROP
次は既定では含まれず、必要に応じて明示的に付与します。
ALTERMOUNTBACKUP
権限でテーブル型の制限は解除されない
権限があっても、各テーブル型の制限は適用されます。
LOGとTAGはUPDATEをサポートしません。VOLATILEとLOOKUPはすべての DML をサポートしますが、検索、更新、削除のWHEREは主キーに基づく必要があります。
権限を付与しても、未対応の DML は利用できません。
主な権限付与の例
-- 指定テーブルへの読み取りだけを許可
GRANT SELECT ON sys.sensor_log TO reader;
-- 指定テーブルへの読み取りと挿入を許可
GRANT SELECT, INSERT ON sys.sensor_log TO writer;
-- 一般ユーザーに DDL だけを許可
GRANT DDL ON machbasedb TO deploy_user;
-- ALTER SYSTEM を許可
GRANT ALTER ON machbasedb TO ops_user;
-- バックアップを許可
GRANT BACKUP ON machbasedb TO backup_user;
-- マウントとアンマウントを許可
GRANT MOUNT ON machbasedb TO mount_user;ユーザー管理の例
上記の操作と結果の例です。
############################################
#SYS アカウントで接続
############################################
Mach> create user demo identified by 'demo';
Created successfully.
Mach> drop user demo;
Dropped successfully.
Mach> create user demo1 identified by 'demo1';
Created successfully.
Mach> create user demo2 identified by 'demo2';
Created successfully.
Mach> alter user demo2 identified by 'demo22';
Altered successfully.
Mach> create table demo1_table (id integer);
Created successfully.
Mach> create bitmap index demo1_table_index1 on demo1_table(id);
Created successfully.
Mach> insert into demo1_table values(99991);
1 row(s) inserted.
Mach> insert into demo1_table values(99992);
1 row(s) inserted.
Mach> insert into demo1_table values(99993);
1 row(s) inserted.
Mach> select * from demo1_table;
ID
--------------
99993
99992
99991
[3] row(s) selected.
#エラー:接続中のユーザーは削除できない
Mach> drop user SYS;
[ERR-02083 : Drop user error. You cannot drop yourself(SYS).]
############################################
#DEMO1 で接続
############################################
Mach> connect demo1/demo1;
Connected successfully.
#エラー:他のアカウントのパスワードは変更できない
Mach> alter user demo2 identified by 'demo22';
[ERR-02085 : ALTER user error. The user(DEMO2) does not have ALTER privileges.]
Mach> alter user demo1 identified by demo11;
Altered successfully.
#エラー:パスワードが不正
Mach> connect demo1/demo11234;
[ERR-02081 : User authentication error. Invalid password (DEMO11234).]
#正しいパスワード
Mach> connect demo1/demo11;
Connected successfully.
Mach> create table demo1_table (id integer);
Created successfully.
Mach> create bitmap index demo1_table_index1 on demo1_table(id);
Created successfully.
Mach> insert into demo1_table values(1);
1 row(s) inserted.
Mach> insert into demo1_table values(2);
1 row(s) inserted.
Mach> insert into demo1_table values(3);
1 row(s) inserted.
Mach> select * from demo1_table;
ID
--------------
3
2
1
[3] row(s) selected.
Mach> select * from demo1.demo1_table;
ID
--------------
3
2
1
[3] row(s) selected.
############################################
#SYS で再接続
############################################
Mach> connect SYS/MANAGER;
Connected successfully.
Mach> select * from demo1_table;
ID
--------------
99993
99992
99991
[3] row(s) selected.
Mach> select * from demo1.demo1_table;
ID
--------------
3
2
1
[3] row(s) selected.
Mach> drop user demo1;
[ERR-02084 : DROP user error. The user's tables still exist. Drop those tables first.]
Mach> connect demo1/demo11;
Connected successfully.
Mach> drop table demo1_table;
Dropped successfully.
Mach> connect SYS/MANAGER;
Connected successfully.
Mach> drop user demo1;
Dropped successfully.