前几天在网上有人咨询一个问题:假设我有两个图层,一个线图层,一个面图层,保存成MXD,然后发布服务,我想用户不同的用户来访问相关的图层,实现在Server中权限的设置。其实这种情况也比较常见,特别是在一个服务下,可能对不同的访问用户设置相关的权限,在实际应用中也是很有适用性的。
当然,ArcGIS Server 10版本可以支持上面说的这种情况。
目前该功能只能支持Oracle数据库
测试环境:ArcGIS Desktop10.1、ArcSDE10.1、ArcGIS Server10.1 、Oracle11.2.0.1
测试说明:
默认数据库在sde用户下存储
SDE.XZQJX_G_410404:线状要素类——web用户名为:lineuser只能访问该图层
SDE.DLTB_G_410404:面状要素类——web用户名为:polyuser只能访问该图层
当用户请求使用某一 Oracle 数据库中数据的 GIS 资源时,ArcGIS Server 可将用户的标识向下传递到数据库,从而能够强制进行基于用户标识的访问控制。此功能目前不适用于其他数据库系统。
使用数据库级别的安全性时,除了或代替 ArcGIS Server Web 服务的权限,可对用户授予对数据库中的表格(和/或列和行)的权限。按照下面的说明进行操作以配置 Oracle 数据库的集成安全性。
--创建与Web同名同密码的数据库账户
CREATE USER <ArcGIS Web user> IDENTIFIED by <ArcGIS Web user> DEFAULT TABLESPACE <tablespace_name> TEMPORARY TABLESPACE <temp_tablespace_name>;
--赋予该数据库帐号权限
GRANT CONNECT,RESOURCE to <ArcGIS Web user>;
--将新建数据库的用户设为源数据库用户的代理用户
ALTER USER <ArcGIS Web user> GRANT CONNECT THROUGH <map author>;
--如下将lineuser设置为sde用户的代理用户,也就是lineuser可以访问sde用户下的数据
ALTER USER LINEUSER GRANT CONNECT THROUGH SDE;
创建完用户,然后创建数据库角色,然后设置针对每个用户对应的角色,在设置角色的语句我们可以设置用户具体对那些图层具体有相关的权限
--创建一个linerole对象
CREATE ROLE linerole NOT IDENTIFIED;
--该linerole角色就是可以“读取”SDE用户下的要素类名称为:XZQJX_G_410404
GRANT SELECT ON SDE.XZQJX_G_410404 TO linerole;
--将该角色赋予lineuser用户
GRANT linerole to lineuser;
CREATE ROLE polyrole NOT IDENTIFIED;
--该polyrole角色就是可以“读写”SDE用户下的要素类名称为:DLTB_G_410404
GRANT SELECT,UPDATE,INSERT,DELETE ON SDE.DLTB_G_410404 TO polyrole;
GRANT polyrole to polyuser;
另外,也可以对要素类的行
和列设置权限。


- 打开 ArcGIS Server 管理员目录 (http://myserver:6080/arcgis/admin) 并以主站点管理员身份或具有管理访问权限的用户身份登录。
- 单击系统 > 属性 > 更新。
- 在属性文本框中,输入下面的 JSON 代码:
- 单击更新保存更改。


-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
-------------------------------------------------------------------------------------------------------