権限のないユーザーによるデータへの悪意のあるアクセスや改ざんを防ぐために、特定のデータベースに対するユーザーの権限を制御できます。このようにして、データベースのセキュリティを向上させることができます。デフォルトでは、LindormTSDB のユーザー認証と権限検証機能は無効になっています。ユーザー認証と権限検証機能を手動で有効にする必要があります。この機能を有効にした後、LindormTSDB に接続する際にリクエストにユーザー資格情報を含める必要があります。そうしないと、リクエストは認証に失敗します。このトピックでは、ユーザー認証と権限検証機能を有効にする方法、接続情報にユーザー資格情報を含める方法、一般的な SQL ステートメントの実行と一般的な API 操作の呼び出しに必要な権限について説明します。
LindormTSDB のアクセス制御
Lindorm は、エンタープライズレベルのアプリケーションのセキュリティを確保するために、多層アクセス制御システムを提供します。アクセス制御は、次の 3 つの層で実行されます。
Alibaba Cloud が提供する RAM
物理層のインスタンス
詳細については、「ホワイトリストの設定」をご参照ください。
論理層のエンジン
アクセス制御は、ユーザー認証と権限検証に基づいてエンジンに実装されます。
使用上の注意
デフォルトでは、Lindorm インスタンスの作成後に初期ユーザーが作成されます。初期ユーザーのデフォルトのユーザー名とパスワードはどちらも root_tsdb です。 LindormTSDB 3.4.30 以前のバージョンを使用している場合、初期ユーザーのデフォルトのユーザー名とパスワードはどちらも root です。セキュリティリスクを回避するために、インスタンスの作成後すぐに初期ユーザーのパスワードを変更してください。
ユーザー認証と権限検証機能が有効になった後、サービスから送信されたリクエストにユーザー資格情報が含まれていない場合、実行中のサービスは LindormTSDB にアクセスできない可能性があります。この場合、リクエストにユーザー資格情報を追加し、サービスを再起動する必要があります。したがって、この機能を有効にする前に、影響を慎重に計画し、完全に評価することをお勧めします。
ユーザー認証と権限検証機能を有効にする
デフォルトでは、ユーザー認証と権限検証機能は無効になっています。この機能を有効にするには、データベースにログオンする必要があります。
手順
ALTER SYSTEM SET USER_AUTH=TRUE;ユーザー認証と権限検証機能が有効になったら、ALTER SYSTEM SET USER_AUTH=FALSE; ステートメントを実行して、この機能を無効にすることができます。この機能を無効にすると、ユーザー認証と権限検証は実行されず、セキュリティリスクが生じます。したがって、この機能を無効にしないことをお勧めします。
ユーザー認証と権限検証機能が有効になっているかどうかを確認する
SHOW PARAMETER USER_AUTH;接続情報にユーザー資格情報を追加する
ユーザー認証と権限検証機能を有効にした後、アプリケーションから LindormTSDB にアクセスするために送信されるリクエストには、ユーザー名とパスワードを含める必要があります。 LindormTSDB のオブジェクトにデータを書き込んだり、オブジェクトからデータをクエリしたりする場合は、アクセスするオブジェクトに対する権限を持っている必要があります。このようにして、LindormTSDB はビジネスへのアクセスを厳密に制御し、必要な権限を分離できます。
例
lindorm-cli
lindorm-cli -url <LindormTSDB SQL のエンドポイント> -username <ユーザー名> -password <パスワード> -database <データベース名>詳細については、「Lindorm-cli を使用して LindormTSDB に接続して使用する」をご参照ください。
JDBC
String url = "<LindormTSDB SQL のエンドポイント>";
String username = "<ユーザー名>";
String password = "<パスワード>";
Connection conn = null;
try {
conn = DriverManager.getConnection(url, username, password);
// クライアントが LindormTSDB に接続された後に操作を実行します。
} catch (SQLException e) {
e.printStackTrace();
}JDBC を使用して LindormTSDB に接続する方法の詳細については、「チュートリアル: Lindorm 用 JDBC ドライバーを使用して LindormTSDB に接続して使用する」をご参照ください。
Druid
dataSource.setDriver(DriverManager.getDriver("<LindormTSDB SQL のエンドポイント>"))
dataSource.setUrl("<LindormTSDB SQL のエンドポイント>")
dataSource.setUsername("<ユーザー名>")
dataSource.setPassword("<パスワード>")Druid を使用して LindormTSDB に接続する方法の詳細については、「チュートリアル: Druid 接続プールを使用して LindormTSDB に接続する」をご参照ください。
HTTP API
アプリケーションが OpenTSDB 互換の HTTP API 操作を呼び出して LindormTSDB にアクセスする場合、ユーザー認証と権限検証機能が有効になっているときは、API 操作の呼び出しによって送信されるリクエストにユーザー資格情報を含める必要があります。
OpenTSDB 互換 API 操作を呼び出して LindormTSDB にアクセスする際にユーザー資格情報を指定する方法
Base64 エンコードされたユーザー資格情報を HTTP リクエストヘッダーに含めます。この方法は、一般的な API 操作を呼び出して SQL リクエストを送信するのと似ています。詳細については、「認証用のユーザー資格情報を指定する」をご参照ください。
Time Series Database (TSDB) SDK を使用するアプリケーションの場合、TSDBConfig オブジェクトを作成するときに basicAuth メソッドを呼び出すことによって、ユーザー名とパスワードを指定できます。
url = "<LindormTSDB の HTTP エンドポイント>/api/v2/sql"
username = "<ユーザー名>"
password = "<パスワード>"
auth = HTTPBasicAuth(username, password)
headers = {
"Content-Type": "text/plain",
"Authorization": f"Basic {base64.b64encode(f'{username}:{password}'.encode()).decode()}"
}HTTP API 操作を使用して LindormTSDB に接続する方法の詳細については、「リクエストコンテンツ」をご参照ください。
HTTP API 操作の呼び出しに必要な権限の詳細については、「LindormTSDB にアクセスするために OpenTSDB 互換の API 操作を呼び出すために必要な権限」をご参照ください。
ユーザーと権限
権限モデル
権限タイプ
LindormTSDB では、権限は 4 つのタイプに分類されます。次の表に、4 つのタイプの権限を示します。
権限名 | 説明 |
READ | 読み取り権限。テーブル内のデータをクエリするには、テーブルに対する読み取り権限が必要です。 |
WRITE | 書き込み権限。テーブルにデータを書き込むには、テーブルに対する書き込み権限が必要です。 |
ADMIN | 管理権限。 LindormTSDB 内のデータオブジェクトを管理するには、管理するデータオブジェクトに対する管理権限が必要です。 |
SYSTEM | システム権限。インスタンス全体に影響を与える可能性のある操作を実行するには、システム権限が必要です。 |
権限スコープ
LindormTSDB では、さまざまなビジネス要件に基づいて、ユーザーに付与する権限のスコープを指定できます。 LindormTSDB は、次の 2 つの権限スコープをサポートしています。
GLOBAL
すべてのリソースに対する権限をグローバルに付与および取り消すことができます。
ユーザーにすべてのリソースに対する権限がグローバルに付与されている場合、そのユーザーは LindormTSDB 内のすべてのデータオブジェクトに対して対応する操作を実行できます。たとえば、ユーザーにすべてのリソースに対する READ 権限がグローバルに付与されている場合、そのユーザーはすべてのデータベース内のすべての時系列テーブルのデータをクエリできます。
DATABASE
指定されたデータベースに対する権限を付与および取り消すことができます。
ユーザーにデータベースに対する権限が付与されている場合、そのユーザーはデータベース内のすべてのデータオブジェクトに対して対応する操作を実行できます。たとえば、ユーザーに DB1 という名前のデータベースに対する READ 権限が付与されている場合、そのユーザーはデータベース内のすべての時系列テーブルのデータをクエリできます。
承認ルール
SYSTEM 権限のスコープは GLOBAL です。
GLOBAL スコープの ADMIN 権限または SYSTEM 権限を持つユーザーのみが、ユーザーの作成、削除、および承認、またはユーザーからの権限の取り消しを行うことができます。
ユーザーの権限は、ユーザーに付与されているすべての権限の和集合です。たとえば、GLOBAL スコープの READ 権限と DATABASE スコープの READ 権限を同時に持っている場合、すべての LindormTSDB データベースのデータをクエリできます。
ユーザーと権限の管理
LindormTSDB では、SQL と LindormTable のクラスター管理システムを使用して、ユーザーと権限を管理できます。
SQL を使用してユーザーと権限を管理する
ユーザーを作成するために使用される SQL 構文の詳細については、「CREATE USER」をご参照ください。
ユーザーを削除するために使用される SQL 構文の詳細については、「DROP USER」をご参照ください。
ユーザーのパスワードを変更するために使用される SQL 構文の詳細については、「ALTER USER」をご参照ください。
すべてのユーザーを表示するために使用される SQL 構文の詳細については、「SHOW DATABASES」をご参照ください。
ユーザーに権限を付与するために使用される SQL 構文の詳細については、「GRANT」をご参照ください。
ユーザーから権限を取り消すために使用される SQL 構文の詳細については、「REVOKE」をご参照ください。
クラスター管理システムを使用してユーザーと権限を管理する
ユーザーと権限のデータは、LindormTSDB と LindormTable で共有されます。 LindormTable をアクティブ化すると、LindormTable のクラスター管理システムにログオンして、ユーザーと権限を管理できます。クラスター管理システムの使用方法の詳細については、「クラスター管理システムにログオンする」をご参照ください。
LindormTable のクラスター管理システムは TRASH 権限をサポートしています。この権限は LindormTSDB では使用されません。
LindormTable の名前空間が LindormTSDB のデータベースと同じ名前で、ユーザーに名前空間に対する権限が付与されている場合、デフォルトでは、ユーザーは LindormTSDB 内の同じ名前のデータベースにアクセスする権限を持ちます。
一般的な SQL ステートメントの実行に必要な権限
次の表に、一般的な SQL ステートメントの実行に必要な権限を示します。
次の表で、○ は権限が必要であることを示し、× は権限が不要であることを示します。
SQL ステートメント | GLOBAL | DATABASE | 説明 | |||||
READ | WRITE | ADMIN | SYSTEM | READ | WRITE | ADMIN | ||
SELECT...FROM... | ○ | × | × | × | ○ | × | × | - |
INSERT INTO...VALUES... | × | ○ | × | × | × | ○ | × | - |
INSERT INTO...SELECT... | ○ | ○ | × | × | ○ | ○ | × | データが挿入されるテーブルに対する WRITE 権限が必要です。データがクエリされるテーブルに対する READ 権限が必要です。 |
DESCRIBE DATABASE ... | × | × | ○ | × | × | × | ○ | - |
CREATE DATABASE... | × | × | ○ | × | × | × | × | - |
ALTER DATABASE... | × | × | ○ | × | × | × | ○ | - |
DROP DATABASE... | × | × | ○ | × | × | × | ○ | - |
SHOW DATABASES | × | × | ○ | × | × | × | × | - |
DESCRIBE TABLE ... | ○ | × | × | × | ○ | × | × | - |
CREATE TABLE... | × | × | ○ | × | × | × | ○ | - |
DROP TABLE... | × | × | ○ | × | × | × | ○ | - |
CREATE USER | × | × | ○ | ○ | × | × | × | - |
ALTER USER... | × | × | ○ | ○ | × | × | × | - |
DROP USER... | × | × | ○ | ○ | × | × | × | - |
SHOW USERS | × | × | ○ | ○ | × | × | × | - |
GRANT... | × | × | ○ | ○ | × | × | × | - |
REVOKE... | × | × | ○ | ○ | × | × | × | - |
SHOW PRIVILEGES... | × | × | ○ | ○ | × | × | × | - |
ALTER SYSTEM... | × | × | × | ○ | × | × | × | - |
SHOW PARAMETER... | × | × | × | ○ | × | × | × | - |
OpenTSDB 互換の HTTP API 操作の呼び出しに必要な権限
OpenTSDB 互換の HTTP API 操作を呼び出すには、GLOBAL スコープに対する対応する権限が必要です。
次の表に、各 HTTP API 操作の呼び出しに必要な権限を示します。
次の表で、○ は権限が必要であることを示し、× は権限が不要であることを示します。
API 操作 | GLOBAL WRITE | GLOBAL READ | GLOBAL ADMIN |
/api/put | ○ | × | × |
/api/query | × | ○ | × |
/api/query/last | × | ○ | × |
/api/mput | ○ | × | × |
/api/mquery | × | ○ | × |
/api/query/mlast | × | ○ | × |
/api/suggest | × | ○ | × |
/api/dump_meta | × | ○ | × |
/api/search/lookup | × | ○ | × |
/api/ttl | × | × | ○ |
/api/truncate | × | × | ○ |