将登录角色添加到 PostgreSQL

在 Standard 或 Advanced 许可等级下可用。

PostgreSQL 使用角色登录到数据库集群和数据库。 各个用户被称为登录角色。 对于将拥有地理数据库中对象的所有登录用户角色,数据库管理员还必须在存储地理数据库的数据库中创建一个方案。 要通过 ArcGIS 使用 PostgreSQL,该方案名称必须与登录角色名称相同,并且归此登录角色所有。

数据库管理员可使用创建数据库用户工具添加可创建表和要素类的登录角色。 此工具将在 PostgreSQL 数据库集群中创建经数据库身份验证的登录用户角色、为您所指定的数据库用户创建匹配方案以及将新方案的 usage 权限授予公共角色。

或者,数据库管理员可以使用 PostgreSQL 客户端应用程序(如 pgAdmin 或 PL/pgSQL)来创建登录用户角色。 要创建不具有方案(因此无法在地理数据库中创建对象)的登录角色,或创建映射到安全支持提供程序接口 (SSPI) 或轻型目录访问协议 (LDAP) 登录账户的登录角色,您必须使用这些应用程序。

数据库管理员还可以创建群组角色,可将登录角色添加到这些角色中,并在群组上指定将应用于所有关联登录用户角色的权限。 使用创建角色工具或脚本创建群组角色,或使用 SQL

注:

群组中每个将拥有地理数据库中对象的登录用户角色都必须有自己的匹配方案。 无法为组角色创建方案。

使用地理处理添加可以创建数据库对象的用户

您可以在 ArcGIS Pro运行创建数据库用户工具或在 Python 脚本中调用 management.CreateDatabaseUser ArcPy 函数来创建登录用户角色,该角色可创建表、要素类以及视图。

要运行创建数据库用户工具或 management.CreateDatabaseUser ArcPy 函数,您必须使用具有超级用户状态的角色连接到数据库。

使用创建数据库用户工具

按照以下步骤,使用创建数据库用户工具在 PostgreSQL 中创建登录用户角色:

  1. 启动 ArcGIS Pro
  2. 使用具有 PostgreSQL 超级用户权限的角色连接到数据库或地理数据库。
  3. 打开创建数据库用户工具。

    该工具位于“数据管理”工具箱的“地理数据库管理”工具集中。

  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 Pro(Standard 或 Advanced)或 ArcGIS Server 的计算机上运行脚本。

    有关从 ArcGIS Server 计算机运行 Python 的信息,请参阅 ArcGIS ServerArcPy

数据库现在有一个可以创建表、要素类和视图的登录用户角色。

新用户可以连接到数据库以创建数据集。 然后,他们可以将其权限授予其他用户。 有关说明,请参阅授予和撤销数据库和企业级地理数据库中的数据集权限

使用 SQL 创建登录账户

您可以使用 SQL 创建角色。 如果您在 PostgreSQL 中为地理数据库执行了此操作,请确保公共群组或特定角色具有创建临时表的权限。 这对于所有用户都是必需的,即使是那些不会创建其他数据库对象的用户。

有关每种用户类型所需的权限,请参阅 PostgreSQL 中的地理数据库权限

创建角色

以下步骤介绍如何使用 psql 创建群组角色从而简化权限管理,以及创建属于该群组角色的登录角色。

  1. 以具有在数据库集群中创建其他角色的权限的用户身份登录 psql。

    可以通过超级用户身份或被授予 createrole 权限的用户身份进行登录。

  2. 使用 create role 命令创建登录群组。

    在此示例中,创建了群组角色以向数据创建者、数据编辑者和数据查看者授予权限。

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

  3. 根据群组成员需要执行的操作,为每个群组角色授予所需的权限。

    当向地理数据库中的角色授予权限时,请参阅 PostgreSQL 中的地理数据库权限;如果数据库不包含地理数据库,请参阅用于在 ArcGIS 中使用 PostgreSQL 数据库的权限

  4. 使用匹配的方案创建一个登录角色,使其拥有数据库对象,并将该登录角色置于所有者群组角色中。

    CREATE ROLE geodataowner1 LOGIN 
    ENCRYPTED PASSWORD '' 
    NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT IN ROLE owners;
    
    CREATE SCHEMA geodataowner1
      AUTHORIZATION geodataowner1;

    更改登录角色和匹配的方案名称,并为将创建数据库对象的每个登录账户再次运行语句。

  5. 创建编辑者群组成员的登录角色。

    在本例中,将创建一个登录角色 (editor1),它设有加密密码。 该角色不具有超级用户身份,无法创建数据库,且无法在数据库集群中创建角色。 但是该角色属于组角色编辑人员的一员,并且将从组角色继承权限。

    CREATE ROLE editor1 LOGIN 
    ENCRYPTED PASSWORD '' 
    NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT IN ROLE editors;
    更改登录角色名称并再次运行语句以便创建可在地理数据库中编辑数据的其他登录角色。

  6. 创建查看者群组成员的登录角色。

    在本例中,将创建一个登录角色 (reader1),它设有加密密码。 该角色不具有超级用户身份,无法创建数据库,且无法在数据库集群中创建角色。 但是该角色属于组角色查看人员的一员,并且将从组角色继承权限。

    CREATE ROLE reader1 LOGIN 
    ENCRYPTED PASSWORD '' 
    NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT IN ROLE viewers;
    更改登录角色名称并再次运行语句以便创建只可在地理数据库中查看数据的其他登录角色。

  7. 在您在步骤 4 中创建的方案中,将 usage 授予查看者和编辑者登录群组。

    usage 权限允许群组角色的成员访问方案中的数据。 如果不具有此权限,数据所有者将无法向群组角色的成员授予对单个数据集的权限。

    GRANT USAGE ON SCHEMA geodataowner1 TO viewers;
    GRANT USAGE ON SCHEMA geodataowner1 TO editors;
  8. 如果要为地理数据库创建这些登录角色,且您已经更改了 sde 方案权限以便公众群组对其不具有 usage 权限,则请向所有者、编辑者和查看者群组授予 sde 方案的 usage 权限。
    GRANT USAGE ON SCHEMA sde TO owners;
    GRANT USAGE ON SCHEMA sde TO editors;
    GRANT USAGE ON SCHEMA sde TO viewers;

数据库现在有一个或多个将创建数据的用户,一个或多个将编辑数据的用户,以及一个或多个将查看数据的用户。

每个用户都必须创建到数据库的连接

数据所有者在数据库或地理数据库中创建数据集后,可使用 ArcGIS 工具向查看者群组授予数据集的 select 权限,并向编辑者群组授予数据集的 selectinsertupdatedelete 权限。 有关说明,请参阅授予和撤销数据库和企业级地理数据库中的数据集权限