PostgreSQL-PostGIS读写权限分离、Arcgis操作兼容方案

应用场景:

(1)用户在PostGIS插件过程中,没有选中单选框Create Spatial Database或想自己按需求建设自己的PostGIS原生库。

(2)按自己定义的用户角色实施PostGIS空间库SQL级别的权限权限管理(会话级别的权限控制,通过pg_hba.conf来设置)。

(3)兼容Arcgis Desktop对PostGIS空间表的导入、新建等操作。

前置条件:

PostgreSQL(9.5)、postgis(2.3.7)、postgis_topology(2.3.7)等空间插件,以及pgAdmin(1.22)软件。

Arcgis Desktop(10.5), 一个shapefile数据。

前期数据库规划(1.0):

    PostGIS空间库:db01

角色组:

db01owner        db01拥有者组,创建删除db01中的对象,包括schema、table等

db01readergroup   db01读取角色组,可读取db01中的对象,包括schema、table、序列等

db01writergroup   db01 编辑角色组,不能新建数据对象,但可对db01数据库中的表进行编辑。

登陆角色:

dbadmin      超级管理员

db01         db01数据库拥有者登陆角色,继承db01owner;

db01reader   db01数据库读用户,继承db01readergroup

db01writer    db01数据库写用户,继承db01writergroup 

在实施的过程中存在以下问题

Arcgis desktop10.5 问题:

  1. 连接带有的数据库名称有大写字符时 报错:无效数据库名称。
  2. 用户名不能有“_”不识别
  3. 在使用arcgis 操作postgis数据库时,必须有与连接用户名同名的模式(schema),创建的表等,默认都在这个模式中
  4. 在使用arcgis 操作postgis数据库时,通过catalog创建的表,表的所有者必须是当前用户,如果将表的所有者改成当前用户的父类(用户组)也报错:编辑对象失败或未找到dbms表。

pgAdmin的问题:

  1. 登陆角色之间不能进行继承。
  2. 在设置对新建表,赋予默认权限时,具有创建表权限的角色都要配置一边,要不只有配置过的角色创建的新表,才会具有默认权限(db01readergroup)

最终优化数据库规划(1.1):

角色组:

db01readergroup   db01读取角色组,可读取db01中的对象,包括schema、table、序列等

db01writergroup   db01 编辑角色组,不能新建数据对象,但可对db01数据库中的表进行编辑。

登陆角色:

dbadmin      超级管理员

db01         db01数据库拥有者登陆角色,继承db01owner;

db01reader   db01数据库读用户,继承db01readergroup

db01writer    db01数据库写用户,继承db01writergroup 

备注:后期增加只读用户时只需继承角色db01readergroup,增加编辑用户时只需继承db01readergroup和db01writergroup角色。数据库故障可根据登陆用户去跟踪故障。

最终效果:

 

用到的命令:
create database db01 with encoding='utf8' owner=db01;

\dn+

\c db01 db01;

Create schema db01;

\c db01 dbadmin;

Create extension postgis;

Create extension postgis_topology;

grant usage on schema db01,public,topology to dbo1readergroup;

Grant select on all tables in schema db01,public,topology to db01readergroup;

Alter default privileges for user dbadmin,db01,db01writergroup in schema db01,public,topology grant select on tables to db01readergroup;

编辑角色组的设置,参考读取角色组的设置

实施操作过程

select * from pg_user   查看所有用户;

select * from pg_tables  得到当前db中所有表的信息

对dbadmin、db01、db三个角色在模式(schema)中新建表,自动赋予角色db01readergroup的读权限(select)

Alter default privileges for user dbadmin,db01,db01writergroup in schema db01,public,topology grant select on tables to db01readergroup;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值