PostgreSQL へのログイン ロールの追加

AllSource 1.4    |

Standard または Advancedのライセンスで利用可能。

PostgreSQL では、ロールを使用して、データベース クラスターおよびデータベースにログインします。 個々のユーザーは、ログイン ロールと呼ばれます。 ログイン ロールがジオデータベース内のオブジェクトを所有する場合は、そのデータベースにスキーマも作成する必要があります。 ArcGIS で PostgreSQL を使用する場合、スキーマにはロールと同じ名前を付ける必要があります。また、ログイン ロールによって所有されていなければなりません。

[データベース ユーザーの作成 (Create Database User)] ツールを使用して、テーブルとフィーチャクラスを作成する権限を持つログイン ロールを追加できます。 このツールでは、PostgreSQL データベース クラスターにデータベース認証ログイン ロールを作成し、ユーザーに対応するスキーマを指定したデータベースに作成し、新しいスキーマに対する usage 権限を public に付与します。

スキーマを所有していないためジオデータベース内にオブジェクトを作成できないログイン ロールを作成するか、Security Support Provider Interface (SSPI) または Lightweight Directory Access Protocol (LDAP) ログインにマッピングされたログイン ロールを作成するには、pgAdmin や PL/pgSQL のような PostgreSQL クライアント アプリケーションを使用して、PostgreSQL データベース クラスターにロールを作成します。

グループ ロールを作成して、ログイン ロールを追加することもできます。 その後、グループに追加されているすべてのログイン ロールに適用される権限をグループに対して付与することができます。 グループ ロールを作成するには、[ロールの作成 (Create Role)] ツールまたはスクリプトを使用するか、SQL を使用します。

注意:

グループの場合でも、グループ内のログイン ロールがジオデータベース内のオブジェクトを所有するときは、それぞれのログイン ロールに対応するスキーマを作成する必要があります。 グループ ロール用のスキーマを作成することはできません。

データベース オブジェクトを作成できるユーザーの追加

ArcGIS AllSource から [データベース ユーザーの作成 (Create Database User)] ツールを実行するか、Python スクリプトで management.CreateDatabaseUser ArcPy 関数を呼び出して、テーブル、フィーチャクラス、およびビューを作成する権限を持つデータベース ユーザーを作成できます。

[データベース ユーザーの作成 (Create Database User)] ツールまたは management.CreateDatabaseUser ArcPy 関数を実行するには、スーパーユーザー ステータスを持つロールを使用してデータベースに接続している必要があります。

データベース ユーザーの作成 (Create Database User) ツールの使用

[データベース ユーザーの作成 (Create Database User)] ツールを使用して PostgreSQL にデータベース ユーザーを作成するには、次の手順に従います。

  1. ArcGIS AllSource を起動します。
  2. PostgreSQL のスーパーユーザー権限を持つロールを使用して、データベースまたはジオデータベースに接続します。
  3. [データベース ユーザーの作成 (Create Database User)] ツールを開きます。

    このツールは、データ管理ツールボックスのジオデータベース管理ツールセットにあります。

  4. [入力データベース接続] で、データベース接続を指定します。
  5. このツールで作成するログイン ロールとスキーマの名前を入力します。
  6. データベース ユーザーのパスワードを入力します。
  7. このユーザーをメンバーにするグループ ロールがすでに存在する場合は、そのグループ ロールを指定します。
  8. [実行] をクリックします。

Python スクリプトの実行

ユーザーの作成をスクリプト化するには、以下の手順に従います。

  1. ArcGIS クライアント コンピューター上でテキスト ファイルを作成し、そのファイルに以下のコード ブロックのいずれかをコピーします。

    自分のサイトに固有の情報を使用するようにコードを変更します。

    これらの例では、PostgreSQL データベース クラスターでスーパーユーザー権限を持つユーザーとして接続する既存のデータベース コネクション ファイルがあることを前提としています。 コネクション ファイルが存在しない場合は、スクリプトを実行する前にファイルを作成します。

    # Name: createdatabaseuser_exampleW.py
    # Description: Uses existing database connection file
    # on a Windows computer to create a database user in PostgreSQL.
    
    # Import arcpy module
    import arcpy
     
    # Provide a database connection file for the PostgreSQL administrator user.
    connection = "C:\\ArcGIS\connection_files\<Connection file>.sde"
    
    # Process: Create database user that can create data.
    arcpy.CreateDatabaseUser_management(connection, "DATABASE_USER", "dbuser", "t3mpor@rypL@ceholder1")
    # Name: createdatabaseuser_exampleL.py
    # Description: Uses existing database connection file
    # on a Linux computer to create a database user in PostgreSQL.
    
    # Import arcpy module
    import arcpy
     
    # Provide a database connection file for the PostgreSQL administrator user.
    connection = "<user>/connections/<Connection_file>.sde"
    
    # Process: Create database user that can create data.
    arcpy.CreateDatabaseUser_management(connection, "DATABASE_USER", "dbuser", "t3mpor@rypL@ceholder1")

  2. .py 拡張子を付けてファイルを保存します。
  3. ArcGIS AllSource (Standard または Advanced) または ArcGIS Server がインストールされているコンピューターからスクリプトを実行します。

    ArcGIS Server コンピューターからの Python の実行については、「ArcGIS Server および ArcPy」をご参照ください。

これで、テーブルとフィーチャクラスを作成する権限を持つユーザーがデータベースに作成されました。

テーブルとフィーチャクラスを作成した後、データ所有者はデータセットに対する権限を他のユーザーに付与できます。 手順については、「データベースとエンタープライズ ジオデータベースの権限の付与と取り消し」をご参照ください。

データを表示および編集するログインの作成

SQL を使用して、データを作成しないユーザーのログイン ロールを作成できます。 ただし、PostgreSQL のジオデータベースで実行する場合は、パブリック グループまたは特定のユーザーが、一時テーブルを作成する権限を持っていることを確認してください。

これらのユーザーへの個別のデータセットに対する権限の付与を簡単にするために、ログイン グループを作成することもできます。

ロールの作成

以下では、データ権限管理を簡単にするために psql を使用してグループ ロールを作成する手順、およびグループ ロールに所属するログイン ロールを作成する手順について説明します。

  1. データベース クラスターに他のロールを作成する権限を持つユーザーとして psql にサイン インします。

    これには、スーパーユーザー ステータスを持つログイン、または createrole 権限が付与されているログインを使用できます。

  2. create role コマンドを使用して、データセットを編集できるユーザー (editors) とデータの表示のみが可能なユーザー (viewers) の 2 つのログイン グループを作成します。

    CREATE ROLE editors 
    NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT;
    
    CREATE ROLE viewers
    NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT;

  3. 次に、editors グループのメンバーになるログイン ロールを作成します。

    この例では、暗号化パスワードを使用して、ログイン ロール (editor1) を作成します。 このロールはスーパーユーザー ステータスを持っていないので、データベースを作成できず、ロールをデータベース クラスターに作成できません。 ただし、このロールはグループ ロール editors のメンバーになっているため、このグループ ロールから権限を継承します。

    CREATE ROLE editor1 LOGIN 
    ENCRYPTED PASSWORD 'sooper.secret' 
    NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT IN ROLE editors;
    ログイン ロール名を変更し、ステートメントを再び実行して、ジオデータベースのデータを編集できるその他のログイン ロールを作成します。

  4. 次に、viewers グループのメンバーになるログイン ロールを作成します。

    この例では、暗号化パスワードを使用して、ログイン ロール (reader1) を作成します。 このロールはスーパーユーザー ステータスを持っていないので、データベースを作成できず、ロールをデータベース クラスターに作成できません。 ただし、このロールはグループ ロール viewers のメンバーになっているため、このグループ ロールから権限を継承します。

    CREATE ROLE reader1 LOGIN 
    ENCRYPTED PASSWORD 'almostas.secret' 
    NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT IN ROLE viewers;
    ログイン ロール名を変更し、ステートメントを再び実行して、ジオデータベースのデータを表示する権限のみを持つその他のログイン ロールを作成します。

  5. geodata スキーマに対する usage 権限を、各ログイン グループに付与します。

    editors および viewers のメンバーは、usage 権限によって geodata スキーマのデータにアクセスできます。 USAGE 権限がなければ、geodata の各データセットに対する権限を viewers および editors グループ ロールのメンバーに付与することはできません。

    GRANT USAGE ON SCHEMA geodata TO editors;
    GRANT USAGE ON SCHEMA geodata TO viewers;
  6. ジオデータベース用のこれらのログインを作成する場合、および、パブリック グループが sde スキーマに対する usage 権限を持つことがないように sde スキーマ権限を変更した場合、sde スキーマに対する usage 権限を editors および viewers グループに付与します。
    GRANT USAGE ON SCHEMA sde TO editors;
    GRANT USAGE ON SCHEMA sde TO viewers;

これで、データを編集する 1 つ以上のユーザーおよびデータを表示する 1 つ以上のユーザーがデータベースに作成されました。

データベースまたはジオデータベースにデータセットが存在している場合、データセットの所有者は、ArcGIS ツールを使用して、データセットに対する select 権限を viewers グループに付与し、データセットに対する 、selectinsertupdate および delete 権限を editors グループに付与することができます。 手順については、「データベースとエンタープライズ ジオデータベースの権限の付与と取り消し」をご参照ください。