ArcGIS 10.1 for Server 安全机制(5)数据库集成安全

0
分享 2014-05-24
1 常见用户需求
在发布和使用GIS服务的过程中,经常会遇到如下的一些需求:
1) 同一个服务,不同用户访问不同的图层
2) 同一个图层,只允许个别用户进行编辑
3) 图层中包含的敏感信息,只允许少数用户访问
4) 图层中的特殊字段,只允许个别用户编辑
5) 同一个图层,不同部门的用户只能访问相关的要素
6) ……
这是很常见的一些服务安全控制需求,针对这些需求,ArcGIS提供了完整的解决方案—数据库集成安全。
2 数据库集成安全 
数据库集成安全是将ArcGIS Server安全机制与数据库的安全体系进行集成,使ArcGIS Server服务能够对数据源进行更细粒度的安全控制。目前数据库集成安全暂时只支持Oracle数据库。

2.1 访问粒度
通过数据库集成安全,可以达到以下三级访问粒度:
1) 控制用户是否有权限访问特定图层 / 表
2) 控制用户是否有权限访问特定属性 / 列
3) 控制用户是否有权限访问特定要素 / 记录
2.2 实现原理
要实现数据库集成安全,需要进行如下几个步骤:
1) 建立与Server角色对应的数据库角色
2) 建立与Server用户对应的数据库用户
3) 将对表、列、记录的访问权限授予数据库角色
3 如何实现
3.1 图层访问控制
3.1.1 创建地图编辑账户
为了支持数据库集成安全,编辑地图的用户需要具备所需的数据库权限。因此首先创建地图编辑用户(使用数据库管理员账户创建),SQL语句如下:
CREATE USER mapeditor IDENTIFIED BY mapeditor
DEFAULT TABLESPACE huangdsde
TEMPORARY TABLESPACE temp;

 
然后给用户授予必需的权限:
GRANT CONNECT, RESOURCE TO mapeditor;

注意:这里的用户名必须采用小写格式。
3.1.2 数据入库 
首先使用mapeditor用户连接SDE数据库,然后将所用到的几个图层导入SDE中,如下图:


本例涉及到如下几个图层数据: GEO_REGION(三级流域)、GEO_WATERBYDOY_EDGE(水系轴线)、GEO_TITIAN(梯田)、GEO_UD_WS(地下水水源地)、GEO_SUR_WS(地表水水源地)、GEO_WM_CO(水利行业单位)、GEO_HEHU_PWK(排污口)、GEO_HEHU_QSK(取水口)、GEO_OS_STATION(观测设施)。

3.1.3 创建地图服务账户
为了与数据库安全集成,需要为每个ArcGIS Server Web服务用户创建对应的数据库账户。本文创建两个数据库用户,分别是供水单位普通员工“huangdong”和业务员“yelloweast”,SQL语句如下:
--供水单位普通员工
CREATE USER huangdong IDENTIFIED by huangdong
DEFAULT TABLESPACE huangdsde
TEMPORARY TABLESPACE temp;
--为huangdong赋予数据库访问权限
GRANT CONNECT,RESOURCE TO huangdong;
--授权huangdong通过mapeditor访问SDE数据
ALTER USER huangdong GRANTCONNECT THROUGH mapeditor;

--供水单位业务员
CREATE USER yelloweast IDENTIFIED by yelloweast
DEFAULT TABLESPACE huangdsde
TEMPORARY TABLESPACE temp;
--为yelloweast赋予数据库访问权限
GRANT CONNECT,RESOURCE TO yelloweast;
--授权yelloweast通过mapeditor访问SDE数据
ALTER USER yelloweast GRANT CONNECT THROUGH mapeditor;

注意:这里的用户名必须采用小写格式。

3.1.4 为用户赋予图层访问权限
接下来需要为上述两个用户赋予对图层的访问权限,首先是创建相应的角色,为角色赋予图层访问权限,然后再将角色赋给用户。
--供水设施浏览角色:role_pub
CREATE ROLE role_pub NOT IDENTIFIED;
GRANT SELECT ON MAPEDITOR.GEO_REGION TO role_pub;
GRANT SELECT ON MAPEDITOR.GEO_WATERBYDOY_EDGE TO role_pub;
GRANT SELECT ON MAPEDITOR.GEO_TITIAN TO role_pub;
GRANT SELECT ON MAPEDITOR.GEO_HEHU_PWK TO role_pub;
GRANT role_pub TO huangdong;

-- 供水设施管理角色:role_org
CREATE ROLE role_org NOTIDENTIFIED;
GRANT SELECT ON MAPEDITOR.GEO_REGIONTO role_org;
GRANT SELECT ON MAPEDITOR.GEO_WATERBYDOY_EDGE TO role_org;
GRANT SELECT ON MAPEDITOR.GEO_TITIAN TO role_org;
GRANT SELECT ON MAPEDITOR.GEO_UD_WS TO role_org;
GRANT SELECT ON MAPEDITOR.GEO_SUR_WS TO role_org;
GRANT SELECT ON MAPEDITOR.GEO_WM_CO TO role_org;
GRANT SELECT,UPDATE,INSERT,DELETE ON MAPEDITOR.GEO_HEHU_PWK TO role_org; --支持更新、插入、删除等管理操作
GRANT SELECT,UPDATE,INSERT,DELETE ON MAPEDITOR.GEO_HEHU_QSK TO role_org; --支持更新、插入、删除等管理操作
GRANT SELECT,UPDATE,INSERT,DELETE ON MAPEDITOR.GEO_OS_STATION TO role_org; --支持更新、插入、删除等管理操作
GRANT role_org TO yelloweast;

3.1.5 编辑地图并发布服务 
创建一个地图文档,将上述SDE图层数据全部加入文档中,完整的地图如下:


保存地图文档,并发布为地图服务。

3.1.6 创建ArcGIS Server角色用户 
接下来需要在ArcGIS Server中创建与数据库角色、用户一一对应的ArcGIS Server角色和用户,创建后如下图:





3.1.7 启用数据库集成安全
启用数据库集成安全,只需要修改安全配置属性即可,首先打开Administrator Directory:http://myserver:6080/arcgis/admin,然后点击“system”,进入system页面后点击“properties”,进入后再点击“update”,在打开的页面中,在“Properties”文本框中输入如下内容:
{"pushIdentityToDatabase": "true" } 然后保存退出,结果如下:


这样设置后,通过ArcGIS Server访问服务(数据来自SDE),则ArcGIS Server会将用户输入的用户名、密码信息传递给数据库,由数据库来进行权限验证,保证用户只能访问其被授权的数据。

3.1.8 测试结果 所有安全配置已经完成,接下来进行服务访问测试,首先以yelloweast用户登录,看到服务属性如下:


浏览地图,可以看见所有图层:


退出,换huangdong登录,看见服务属性如下(与yelloweast看见的一样):


浏览地图,只能看见四个图层:



3.2 字段访问控制
3.2.1 创建地图编辑账户 
在3.1图层访问控制中已经创建,这里不再重复操作。
3.2.2 数据入库 
在3.1图层访问控制中已经入库,这里不再重复操作。
3.2.3 创建地图服务账户 
在3.1图层访问控制中已经创建,这里不再重复操作。

3.2.4 为用户赋予字段访问权限
要为字段赋予访问权限,首先需要创建视图:
CREATE VIEW v_surws_f ASSELECT objectid_1,bm,shape_len,shape FROM mapeditor.geo_sur_ws;

建议使用mapeditor用户来创建视图(需要先赋予mapeditor创建视图的权限),然后将视图访问权限赋给对应的角色:
GRANT SELECT ON v_surws TO role_pub; 

这样,role_pub包含的用户,如huangdong,就可以通过访问视图,访问到上述四个字段。

3.2.5 编辑地图并发布服务 创建视图之后,刷新sde连接,可以看见新创建的视图,如下图:


创建一个地图文档,将视图拖到文档中,弹出对话框如下:



这是自动创建了查询图层,直接点“Finish”即可。这样地图文档中就添加了一个查询图层,其中包含四个字段。 保存地图文档,发布服务。

3.2.6 创建ArcGIS Server角色用户 
在3.1图层访问控制中已经创建,这里不再重复操作。

3.2.7 启用数据库集成安全 
在3.1图层访问控制中已经启用,这里不再重复操作。
3.2.8 测试结果 
所有安全配置已经完成,接下来进行服务访问测试,以huangdong用户登录,看到图层字段如下:



3.3 要素访问控制
3.3.1 创建地图编辑账户 
在3.1图层访问控制中已经创建,这里不再重复操作。

3.3.2 数据入库 
在3.1图层访问控制中已经入库,这里不再重复操作。

3.3.3 创建地图服务账户 
在3.1图层访问控制中已经创建,这里不再重复操作。
3.3.4 为用户赋予要素访问权限
要为要素赋予访问权限,首先需要创建视图:
CREATE VIEW v_ws_sur AS SELECT * FROM GEO_SUR_WS WHERE BM<4;

建议使用mapeditor用户来创建视图(需要先赋予mapeditor创建视图的权限),然后将视图访问权限赋给对应的角色:
GRANT SELECT ON v_ws_sur TO role_pub;
这样,role_pub包含的用户,如huangdong,就可以通过访问视图,访问到图层中BM<4的要素。

3.3.5 编辑地图并发布服务 创建视图之后,刷新sde连接,可以看见新创建的视图,如下图:



同样创建地图文档,将视图拖到文档中,将自动创建查询图层。 保存地图文档,并发布服务。

3.3.6 创建ArcGIS Server角色用户 
在3.1图层访问控制中已经创建,这里不再重复操作。

3.3.7 启用数据库集成安全 
在3.1图层访问控制中已经启用,这里不再重复操作。

3.3.8 测试结果 
所有安全配置已经完成,接下来进行服务访问测试,以huangdong用户登录,看到图层要素如下:



4 总结 
通过数据库集成安全性,可以对服务进行细粒度的访问控制,实现同一个服务,不同用户访问不同图层,同一个图层,不同用户访问不同字段或不同要素。

文章来源:http://blog.csdn.net/esrichinacd/article/details/8005105

0 个评论

要回复文章请先登录注册