sql >> データベース >  >> NoSQL >> MongoDB

MongoDBユーザー管理の概要

    データベースユーザー管理は、データベースにアクセスしているユーザーを理解し、各ユーザーのアクセス権を設定する必要があるため、データセキュリティの特に重要な部分です。データベースに適切なユーザー管理がない場合、ユーザーアクセスは非常に煩雑になり、時間の経過とともに維持するのが困難になります。

    MongoDBは、NoSQLデータベースおよびドキュメントストアです。 RBAC(Role Based-Access Control)の概念を適用することは、ユーザーの資格情報を管理するための適切なユーザー管理を実装するための鍵です。

    役割ベースのアクセス制御(RBAC)とは何ですか?

    RBACは、システムを許可されたユーザーのみに制限するアプローチです。組織では、さまざまな職務に対して役割が作成され、データベースでは、特定の役割に割り当てられたいくつかの操作を実行するためのアクセス権が作成されます。

    スタッフメンバー(または他のシステムユーザー)には特定の役割が割り当てられ、それらを介してコンピューターシステム機能を実行するためのアクセス許可が割り当てられます。ユーザーには直接権限が付与されるのではなく、自分の役割(または複数の役割)を介してのみ権限を取得します。個々のユーザー権限の管理は、ユーザーのアカウントに適切な役割を設定するだけの問題になります。これにより、一般的な操作(ユーザーの追加やユーザー部門の変更など)が簡素化されます。

    RBACには次の3つの主なルールが設定されています。

    • 役割の割り当て :サブジェクトは、サブジェクトが選択されているか、ロールが割り当てられている場合にのみ、権限を実行できます。
    • 承認の役割 :サブジェクトのアクティブな役割は、サブジェクトに対して承認されている必要があります。上記のルール1では、このルールにより、ユーザーは許可されたユーザーのみが役割を担うことができます。
    • 許可の承認 :サブジェクトは、サブジェクトのアクティブな役割に対して許可が許可されている場合にのみ許可を実行できます。ルール1と2では、このルールにより、ユーザーは許可されたユーザーに対してのみ許可を行使できます。

    このブログでは、MongoDBデータベースのロールベースのアクセス制御について簡単に説明します。

    MongoDBユーザーロール

    MongoDBには、データベース内にいくつかのタイプのロールがあります。それらは...

    組み込みの役割

    ロールベースの承認を通じてMongoDBへのデータとアクションへのアクセスを提供し、データベースでいくつかのレベルのアクセスを提供するロールが組み込まれています。

    ロールは、作成されたリソースに対して何かを実行するためのいくつかの特権を与えます。 MongoDBの組み込みロールには、いくつかのカテゴリがあります。

    • ユーザーデータベース :役割データベースユーザーには、システム以外のコレクションのデータを操作する役割があります。ユーザーデータベースの役割の例は、読み取り、読み取り、書き込みです。
    • データベース管理 :ロールデータベース管理は、ユーザー管理、スキーマ、データベース内のオブジェクトなどのデータベースの管理管理を処理します。
    • データベース管理の役割の例は、dbAdmin、userAdmin、dbOwnerです。
    • クラスター管理 :クラスター管理の役割は、レプリカセットとシャードを含むMongoDBシステム全体を管理することです。クラスタ管理の役割の例は、clusterAdmin、clusterManagerです。
    • バックアップと復元 :このロールは、MongoDBのデータベースバックアップに関連する機能に固有です。役割の例は、バックアップ、復元です。
    • すべてのデータベースの役割 :ロールはデータベース管理者にあり、ローカルと構成を除くすべてのデータベースにアクセスできます。例:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase。
    • スーパーユーザー :ロールには、すべてのデータベースのすべてのユーザー、すべての特権へのアクセスを許可する機能があります。この役割の例:root
    ユーザー定義の役割

    組み込みの役割に加えて、必要に応じて、それらの役割にどのような特権を与えるかによって、独自の役割を作成できます。ロールを作成するには、db.createRole()関数コマンドを使用できます。ロールを作成できることに加えて、データベース内の既存のロールを削除するのに役立つdb.dropRole()、特定のロールからすべての情報を取得するdb.getRole()関数など、既存のロールを管理するための関数がいくつかあります。

    MongoDBの特権アクション

    MongoDBの特権アクションは、ユーザーがリソースに対して実行できるアクションです。 MongoDBには、次のようないくつかのアクションカテゴリがあります。

    • データベース管理アクション、changePassword、createCollection、createIndexアクションなどのデータベース管理に関連するコマンドに関連するアクション。
    • クエリおよび書き込みアクション、コレクション内のデータ操作の実行に関連するアクション。たとえば、挿入アクションでは、そのアクションで実行できるコマンドは、ドキュメントに挿入できる挿入コマンドです。
    • デプロイメント管理アクション、データベース構成の変更に関連するアクション。デプロイメント管理カテゴリに分類されるアクションには、cpuProfiler、storageDetails、killOpがあります。
    • レプリケーションアクション、replSetConfigure、replSetHeartbeatなどのデータベースレプリケーションリソースの実行に関連するアクション。
    • サーバー管理アクション、オペレーティングシステムレベルでログデータベースをローテーションするために使用されるlogrotateアクションなど、mongoDB上のサーバー管理リソースからのコマンドに関連するアクション。
    • シャーディングアクション、新しいシャードノードを追加するためのaddShardなどのデータベースシャーディングデータベースからのコマンドに関連するアクション。
    • セッションアクション、listSessions、killAnySessionなどのデータベース内のリソースセッションに関連するアクション。
    • 診断アクション、データベース内の最新の状態を見つけるためのdbStatsなどのリソースの診断に関連するアクション。
    • 無料の監視アクション、データベースでの監視に関連するアクション。
    MongoDBユーザーとロールの管理

    次のように、ユーザーを作成してから、そのユーザーを組み込みの役割に割り当てることができます。

    db.createUser( {
    
    user: "admin",
    
    pwd: "thisIspasswordforAdmin",
    
    roles: [ { role: "root", db: "admin" } ]
    
    } );

    上記のスクリプトでは、管理者ユーザーは、組み込みのルートロールで定義されたパスワードで作成されます。このパスワードはスーパーユーザーカテゴリに含まれます。

    さらに、ユーザーに複数の役割を割り当てることができます。例を次に示します。

    db.createUser(
    
    {user:'businessintelligence', 
    
    pwd:'BIpassw0rd', 
    
    roles:[{'role':'read', 'db':'oltp'}, { 'role':'readWrite', 'db':'olapdb'}]
    
    });

    ビジネスインテリジェンスユーザーには2つの役割があり、最初はoltpデータベースの読み取り役割、もう1つはolapdbデータベースのreadWrite役割です。

    ユーザー定義の役割を作成するには、db.createRole()コマンドを使用できます。ロールを作成する目的を決定して、そのロールでどのアクションが実行されるかを決定できるようにする必要があります。以下は、Mongodbデータベースを監視するための役割を作成する例です:

    use admin
    
    db.createRole(
    
       {
    
         role: "RoleMonitoring",
    
         privileges: [
    
           { resource: { cluster: true }, actions: [ "serverStatus" ] }
    
         ],
    
         roles: []
    
       }
    
    )

    次に、作成するユーザーにユーザー定義の役割を割り当てることができます。次のコマンドを使用できます。

    db.createUser( {
    
    user: "monuser",
    
    pwd: "thisIspasswordforMonitoring",
    
    roles: [ { role: "RoleMonitoring", db: "admin" } ]
    
    } );

    一方、既存のユーザーに役割を割り当てるには、次のコマンドを使用できます。

    db.grantRolesToUser(
    
        "existingmonuser",
    
        [
    
          { role: "RoleMonitoring", db: "admin" }
    
        ]
    
    )

    ロールの既存のユーザーを取り消すには、次のコマンドを使用できます:

    db.revokeRolesFromUser(
    
        "oldmonguser",
    
        [
    
          { role: "RoleMonitoring", db: "admin" }
    
        ]
    
    )

    ユーザー定義のロールを使用することで、ユーザーが特定のデータベースの行のみを削除できるように制限するロールなど、それらのロールに対して実行するアクションに応じて、必要に応じてロールを作成できます。

    結論

    アクセス権を適用すると、セキュリティを向上させることができます。データベース内の役割とユーザーをマッピングすると、ユーザーアクセスを簡単に管理できます。

    役割と権利に関するこの情報がすべて適切に文書化されており、文書へのアクセスが制限されていることを確認してください。これは、他のDBAまたはサポート担当者と情報を共有するのに役立ち、監査とトラブルシューティングに役立ちます。


    1. MongoDBで提供された配列の任意の組み合わせを含む配列フィールドのマッチング

    2. CDPオペレーショナルデータベース(COD)へのアプリケーションの展開

    3. TransactionRequiredException更新/削除クエリの実行

    4. HerokuにMongoDBをデプロイする方法