OceanBaseデータベースのOracleモードはプロキシユーザー機能をサポートしています。プロキシユーザー機能により、ユーザーA(つまりプロキシユーザー)が他のユーザーB(つまりターゲットユーザー)を代表してデータベースに接続し、ユーザーBのロール権限でデータベース操作を実行することが許可されます。
前提条件
ALTER USERコマンドを実行するユーザーはALTER USERシステム権限を持っている必要があります。権限の確認に関する操作については、ユーザー権限の確認を参照してください。対応するユーザーがALTER USERシステム権限を持っていない場合は、管理者に連絡し、追加してもらってください。ユーザーへの権限付与に関する操作については、直接権限付与を参照してください。
背景
現在の環境にユーザーUSERAとUSERBの2人がいると仮定します。ユーザーUSERBはemplyeeとdeveloperの2つのロール権限を持っています。今回は、ユーザーUSERAをユーザーUSERBのプロキシユーザーとして権限付与する必要があります。
注意事項
プロキシユーザーがターゲットユーザーに代わってデータベースに接続する場合、現在OBClient、Javaドライバー(OceanBase Connector/J)、Cドライバー(OBCI)を介した接続がサポートされています。各製品のバージョン要件は以下の通りです:
OBClient:V2.2.6以降のバージョン
OceanBase Connector/J:V2.4.10以降のバージョン
OBCI:V2.0.9以降のバージョン(V2.1.0バージョンを除く)
プロキシユーザーの権限付与
ALTER USER権限を持つユーザーでクラスタのOracleテナントにログインします。接続例は以下の通りですが、データベース接続時は実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -usys@oracletenant#obdemo -p*****以下のステートメントを実行し、ユーザー
USERAにユーザーUSERBを代理する権限を付与します。ALTER USER user_name GRANT CONNECT THROUGH proxy_user_name [with_clause]; with_clause: { WITH ROLE {role_name[, role_name,...]} | WITH NO ROLE | WITH ROLE ALL EXCEPT {role_name[, role_name,...]} }関連パラメータの説明は以下の通りです:
user_name:代理されるターゲットユーザー名。proxy_user_name:プロキシユーザー名。権限付与後、このユーザーはターゲットユーザーを代表してデータベースに接続し、ターゲットユーザーのロール権限でデータベース操作を実行できます。with_clause:プロキシユーザーがターゲットユーザーに代わってデータベースに接続する際に有効なロール権限を指定します。この句を指定しない場合、デフォルトではプロキシユーザーがターゲットユーザーに代わってデータベースに接続する際、ターゲットユーザーのすべてのロール権限が適用されます。注意
代理ユーザーの有効なロール権限を指定する場合、パスワード付きのロール権限については、データベースに接続した後、
SET ROLE role_name IDENTIFIED BY role_password;コマンドで手動でそのロールを有効化する必要があります。WITH ROLE {role_name[, role_name,...]}:代理ユーザーがターゲットユーザーに代わってデータベースに接続する際、指定されたロール権限を自動的に取得し、有効化します。つまり、ターゲットユーザーで指定されたロール権限のみが有効になります。WITH NO ROLE:代理ユーザーがターゲットユーザーに代わってデータベースに接続する際、ターゲットユーザーのいかなるロール権限も自動的に取得しません。つまり、ターゲットユーザーのすべてのロール権限は無効になります。WITH ROLE ALL EXCEPT {role_name[ ,role_name,...]}:代理ユーザーがターゲットユーザーに代わってデータベースに接続する際、ターゲットユーザーで指定されたロールを除く他のすべてのロール権限を自動的に取得し、有効化します。
例:
ユーザー
USERAに代理権限を付与し、ユーザーUSERBがデータベースに接続する場合、ユーザーUSERBのすべてのロール権限が有効になります。obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA;ユーザー
USERAに代理権限を付与し、ユーザーUSERBがデータベースに接続する場合、ユーザーUSERBのemployeeロールのみが有効になります。obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA WITH ROLE employee;ユーザー
USERAに代理権限を付与し、ユーザーUSERBがデータベースに接続する場合、ユーザーUSERBのすべてのロールが無効になります。obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA WITH NO ROLE;ユーザー
USERAに代理権限を付与し、ユーザーUSERBがデータベースに接続する場合、employeeロールを除くユーザーUSERBの他のロールが有効になります。obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA WITH ROLE ALL EXCEPT employee;
実行が成功したら、接続を終了します。
ユーザー
USERAを使用して、ユーザーUSERBに代理ログインします。obclient -h10.xx.xx.xx -P2883 -uproxy_user_connection -p***** --proxy_user[=]user_name関連パラメータの説明は以下のとおりです:
-h:このパラメータは、OceanBaseデータベースの接続IPを指定するために使用されます。ODP経由で接続する場合はODPのアドレスを、直接接続する場合は特定のOBServerノードのIPアドレスを入力します。-P:このパラメータは、OceanBaseデータベースの接続ポートを指定するために使用されます。ODP経由で接続する場合はODPのリスニングポートを指定します。デフォルトは2883で、ODPのデプロイ時にカスタマイズ可能です。直接接続する場合は、対応するOBServerノードのSQLポートを指定します。デフォルトは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。-u:このパラメータは、代理ユーザーの接続情報を指定するために使用されます。ODP経由で接続する場合は、代理ユーザー名@テナント名#クラスタ名、クラスタ名:テナント名:代理ユーザー名、クラスタ名-テナント名-代理ユーザー名、またはクラスタ名.テナント名.代理ユーザー名の形式を指定します。直接接続する場合は代理ユーザー名@テナント名の形式を指定します。-p:このパラメータは、代理ユーザーの接続パスワードを指定するために使用されます。この例では、ユーザーUSERAの接続パスワードを指定します。--proxy_user:このパラメータは、代理されるユーザー名、つまりターゲットユーザー名を指定します。この例では、ユーザーUSERBを指定します。
USERAがUSERBを代理してOBClientを介してデータベースに接続する例は以下のとおりです:obclient -h10.xx.xx.xx -P2883 -uUSERA@oracletenant#obdemo -p***** --proxy_user USERB接続成功のメッセージは次のとおりです:
Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 3221487643 Server version: OceanBase 4.3.2.0 (r200000272024061717-93c0ed73ebbcac6edbf7b585860b75d825935358) (Built Jun 17 2024 18:06:04) Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. obclient [USERB]>接続情報から、現在表示されている接続ユーザーが
USERBであることがわかります。その権限は、認可時に指定された権限によって決まります。
プロキシユーザーの解除
ALTER USER権限を持つユーザーでクラスタのOracleテナントにログインします。接続例は以下のとおりですが、データベースへの接続時には実際の環境に従ってください。
obclient -h10.xx.xx.xx -P2883 -usys@oracletenant#obdemo -p*****以下のステートメントを実行して、プロキシユーザー
USERAのプロキシ権限を解除します。obclient [SYS]> ALTER USER USERB REVOKE CONNECT THROUGH USERA;