向 PostgreSQL 数据库添加用户
PostgreSQL 使用角色登录到数据库集群和数据库。可以将角色添加到 PostgreSQL 数据库集群。
各个数据库用户即称为登录角色。对于将拥有地理数据库对象的所有登录角色,还必须在该数据库中创建方案。该方案名称必须与登录角色名称相同,并且归此登录角色所有。
您还可以创建可向其中添加登录角色的组角色。然后,可以指定对将要应用于所有相关联登录角色的组的权限。
还必须为组中每个将拥有地理数据库对象的登录角色创建匹配方案。无法为组角色创建方案。
可以使用 PostgreSQL 客户端应用程序(如 pgAdmin III 或 PL/pgSQL)在 PostgreSQL 数据库集群中创建角色。以下这些说明介绍了如何使用 PL/pgSQL 创建角色、方案和组,以及如何为角色或组授予权限。
- 以具有在 DBMS 中创建其他角色的权限的用户身份登录 psql。这类用户通常是 postgres 超级用户。
-
执行 CREATE ROLE 命令。
在本例中,将创建一个登录角色 role4u,它设有加密密码。该角色可以在数据库中创建对象,但不属于超级用户,未继承各组的权限,因此无法在数据库集群中创建角色。
CREATE ROLE role4u LOGIN ENCRYPTED PASSWORD 'super.secret' NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE;
提示:如果事先知道需要将此登录角色分配给某个组,创建登录角色时可使其具有 INHERIT 权限。
-
执行 CREATE SCHEMA 命令,在存储地理数据库的数据库中为登录角色创建方案。
在本例中,创建了匹配的 role4u 方案,并且将该方案的权限授予 role4u 登录角色:
CREATE SCHEMA role4u AUTHORIZATION role4u;
- 为登录角色授予对方案的 USAGE 和 CREATE 权限。
只有执行此操作后,用户才能创建日志文件表。有关日志文件表的详细信息,请参阅有关 PostgreSQL 的 ArcSDE 日志文件表配置选项。
GRANT USAGE ON SCHEMA role4u TO role4u; GRANT CREATE ON SCHEMA role4u TO role4u;
-
为需要访问用户方案中的数据的所有其他登录角色或组角色授予对此方案的 USAGE 权限。在本例中,将 USAGE 权限授予公共组,这样,所有连接到数据库的用户都能访问 role4u 方案中的数据:
GRANT USAGE ON SCHEMA role4u TO public;
-
如果要将该登录角色置于组中以控制权限,可创建一个组角色。
例如,您可以为在地理数据库中创建数据的所有登录角色创建一个组。这里的组角色名称为 dataowner:
CREATE ROLE dataowner NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE;
-
将组角色的权限授予所有适用的登录角色。
在本例中,将组的权限授予 role4u 登录角色。对要添加到组中的所有其他登录角色执行如下语句。
GRANT dataowner TO role4u;
-
如果创建登录角色时未授予其继承组的权限(如同本主题中的示例所述),可使该登录角色继承将要分配到的组的组权限。
ALTER ROLE role4u INHERIT;
-
如果正在使用组,则可为该组授予对其他数据集的权限。如果未使用组,则为各个登录角色授予权限。
在本例中,为 dataowner 组授予对公共方案中的 geometry_columns 和 spatial_ref_sys 表的权限。创建数据的任何用户具有这些权限时才可使用 PostGIS 几何存储。
GRANT SELECT, INSERT, UPDATE, DELETE ON public.geometry_columns TO dataowner; GRANT SELECT ON public.spatial_ref_sys TO dataowner;