在 Standard 或 Advanced 许可等级下可用。
PostgreSQL 使用角色登录到数据库集群和数据库。 各个用户被称为登录角色。 对于将拥有地理数据库中对象的所有登录角色,还必须在该数据库中创建方案。 要通过 ArcGIS 使用 PostgreSQL,该方案名称必须与登录角色名称相同,并且归此登录角色所有。
可使用创建数据库用户工具添加可创建表和要素类的登录角色。 此工具将在 PostgreSQL 数据库集群中创建经数据库身份验证的登录角色、为您所指定的数据库用户创建匹配方案以及将新方案的 usage 权限授予公共角色。
要创建不具有方案(因此无法在地理数据库中创建对象)的登录角色,或创建映射到安全支持提供程序接口 (SSPI) 或轻型目录访问协议 (LDAP) 登录账户的登录角色,请使用 PostgreSQL 客户端应用程序(如 pgAdmin 或 PL/pgSQL)在 PostgreSQL 数据库集群中创建角色。
您也可以创建可向其中添加登录角色的组角色。 然后,即可针对该组指定将应用于所有相关登录角色的权限。 可使用创建角色工具或脚本创建组角色,也可以使用 SQL。
注:
您仍必须为组中将拥有地理数据库中对象的每个登录角色创建匹配的方案。 无法为组角色创建方案。
添加可创建数据库对象的用户
您可以运行 ArcGIS AllSource 中的创建数据库用户工具或调用 Python 脚本中的 management.CreateDatabaseUser ArcPy 函数来创建数据库用户,该用户可创建表、要素类以及视图。
要运行创建数据库用户工具或 management.CreateDatabaseUser ArcPy 函数,您必须使用具有超级用户身份的角色连接到数据库。
使用创建数据库用户工具
按照以下步骤,利用创建数据库用户工具在 PostgreSQL 中创建数据库用户:
- 启动 ArcGIS AllSource。
- 使用具有 PostgreSQL 超级用户权限的角色连接到数据库或地理数据库。
- 打开创建数据库用户工具。
该工具位于“数据管理”工具箱的“地理数据库管理”工具集中。
- 指定输入数据库连接的数据库连接。
- 为此工具将要创建的登录角色和方案提供名称。
- 为数据库用户提供密码。
- 如果您已具有组角色并希望此用户成为该组的成员,请指定该用户的组角色。
- 单击运行。
运行 Python 脚本
若要编写用户创建的脚本,请按照以下步骤操作:
- 在 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")
- 以 .py 扩展名保存该文件。
- 在安装了 ArcGIS AllSource(Standard 或 Advanced)或 ArcGIS Server 的计算机上运行脚本。
有关从 ArcGIS Server 计算机运行 Python 的信息,请参阅 ArcGIS Server 和 ArcPy。
此时,数据库已具有可创建表和要素类的用户。
如果已存在表和要素类,数据所有者可向其他用户授予数据集的权限。 有关说明,请参阅授予和撤销数据库和企业级地理数据库中的数据集权限。
创建登录以查看和编辑数据
可使用 SQL 为不创建数据的用户创建登录角色。 如果您在 PostgreSQL 中为地理数据库执行了此操作,请确保公共组或指定用户具有创建临时表的权限。
也可创建登录组以简化向这些用户授予单个数据集权限的操作。
创建角色
以下步骤介绍如何使用 psql 创建组角色从而简化数据权限管理,以及创建属于该组角色的登录角色。
- 以具有在数据库集群中创建其他角色的权限的用户身份登录 psql。
可以通过超级用户身份或被授予 createrole 权限的用户身份进行登录。
- 使用 create role 命令创建两个登录组:一个用于可编辑数据集的用户(编辑人员),一个用于只能查看数据的用户(查看人员)。
CREATE ROLE editors NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT; CREATE ROLE viewers NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT;
- 接下来,创建属于编辑人员组的成员的登录角色。
在本例中,将创建一个登录角色 (editor1),它设有加密密码。 该角色不具有超级用户身份,无法创建数据库,且无法在数据库集群中创建角色。 但是该角色属于组角色编辑人员的一员,并且将从组角色继承权限。
更改登录角色名称并再次运行语句以便创建可在地理数据库中编辑数据的其他登录角色。CREATE ROLE editor1 LOGIN ENCRYPTED PASSWORD 'sooper.secret' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT IN ROLE editors;
- 现在,创建属于查看人员组的成员的登录角色。
在本例中,将创建一个登录角色 (reader1),它设有加密密码。 该角色不具有超级用户身份,无法创建数据库,且无法在数据库集群中创建角色。 但是该角色属于组角色查看人员的一员,并且将从组角色继承权限。
更改登录角色名称并再次运行语句以便创建只可在地理数据库中查看数据的其他登录角色。CREATE ROLE reader1 LOGIN ENCRYPTED PASSWORD 'almostas.secret' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT IN ROLE viewers;
- 为各个登录组授予 geodata 方案的 usage 权限。
usage 权限允许作为编辑人员和查看人员的成员访问地理数据方案中的数据。 如果不具有此权限,则地理数据无法向查看人员和编辑人员组角色的成员授予单个数据集的权限。
GRANT USAGE ON SCHEMA geodata TO editors; GRANT USAGE ON SCHEMA geodata TO viewers;
- 如果要为地理数据库创建这些登录角色,且您已经更改了 sde 方案权限以便公众群组对其不具有 usage 权限,则请向编辑人员和查看人员组授予 sde 方案的 usage 权限。
GRANT USAGE ON SCHEMA sde TO editors; GRANT USAGE ON SCHEMA sde TO viewers;
现在,您的数据库将会具有一个或多个要编辑数据的用户,以及一个或多个要查看数据的用户。
如果数据库或地理数据库中已存在数据集,则所有者可使用 ArcGIS 工具向查看人员组授予数据集的 select 权限,并向编辑人员组授予数据集的 select、insert、update 和 delete 权限。 有关说明,请参阅授予和撤销数据库和企业级地理数据库中的数据集权限。