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;