前幾天在網(wǎng)上有人咨詢一個(gè)問(wèn)題:假設(shè)我有兩個(gè)圖層,一個(gè)線圖層,一個(gè)面圖層,保存成MXD,然后發(fā)布服務(wù),我想用戶不同的用戶來(lái)訪問(wèn)相關(guān)的圖層,實(shí)現(xiàn)在Server中權(quán)限的設(shè)置。其實(shí)這種情況也比較常見(jiàn),特別是在一個(gè)服務(wù)下,可能對(duì)不同的訪問(wèn)用戶設(shè)置相關(guān)的權(quán)限,
前幾天在網(wǎng)上有人咨詢一個(gè)問(wèn)題:假設(shè)我有兩個(gè)圖層,一個(gè)線圖層,一個(gè)面圖層,保存成MXD,然后發(fā)布服務(wù),我想用戶不同的用戶來(lái)訪問(wèn)相關(guān)的圖層,實(shí)現(xiàn)在Server中權(quán)限的設(shè)置。其實(shí)這種情況也比較常見(jiàn),特別是在一個(gè)服務(wù)下,可能對(duì)不同的訪問(wèn)用戶設(shè)置相關(guān)的權(quán)限,在實(shí)際應(yīng)用中也是很有適用性的。
當(dāng)然,ArcGIS Server 10版本可以支持上面說(shuō)的這種情況。
目前該功能只能支持Oracle數(shù)據(jù)庫(kù)
測(cè)試環(huán)境:ArcGIS Desktop10.1、ArcSDE10.1、ArcGIS Server10.1 、Oracle11.2.0.1
測(cè)試說(shuō)明:
默認(rèn)數(shù)據(jù)庫(kù)在sde用戶下存儲(chǔ)
SDE.XZQJX_G_410404:線狀要素類——web用戶名為:lineuser只能訪問(wèn)該圖層
SDE.DLTB_G_410404:面狀要素類——web用戶名為:polyuser只能訪問(wèn)該圖層
當(dāng)用戶請(qǐng)求使用某一 Oracle 數(shù)據(jù)庫(kù)中數(shù)據(jù)的 GIS 資源時(shí),ArcGIS Server 可將用戶的標(biāo)識(shí)向下傳遞到數(shù)據(jù)庫(kù),從而能夠強(qiáng)制進(jìn)行基于用戶標(biāo)識(shí)的訪問(wèn)控制。此功能目前不適用于其他數(shù)據(jù)庫(kù)系統(tǒng)。
使用數(shù)據(jù)庫(kù)級(jí)別的安全性時(shí),除了或代替 ArcGIS Server Web 服務(wù)的權(quán)限,可對(duì)用戶授予對(duì)數(shù)據(jù)庫(kù)中的表格(和/或列和行)的權(quán)限。按照下面的說(shuō)明進(jìn)行操作以配置 Oracle 數(shù)據(jù)庫(kù)的集成安全性。
因?yàn)槲业臄?shù)據(jù)庫(kù)已經(jīng)有一個(gè)SDE用戶,我的數(shù)據(jù)也放在SDE用戶了,所以我就不用創(chuàng)建新用戶了,不過(guò)也可以創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)用戶,將測(cè)試數(shù)據(jù)導(dǎo)入到該用戶下也可以。
我已經(jīng)擁有一個(gè)Server的超級(jí)用戶arcgis,兩個(gè)普通的web用戶,lineuser、polyuser,所以我需要在數(shù)據(jù)庫(kù)創(chuàng)建與Web用戶相同名稱相同密碼的兩個(gè)數(shù)據(jù)庫(kù)賬戶。
--創(chuàng)建與Web同名同密碼的數(shù)據(jù)庫(kù)賬戶 CREATE USER IDENTIFIED by DEFAULT TABLESPACETEMPORARY TABLESPACE ; --賦予該數(shù)據(jù)庫(kù)帳號(hào)權(quán)限 GRANT CONNECT,RESOURCE to ; --將新建數(shù)據(jù)庫(kù)的用戶設(shè)為源數(shù)據(jù)庫(kù)用戶的代理用戶 ALTER USER GRANT CONNECT THROUGH
--創(chuàng)建一個(gè)linerole對(duì)象 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角色就是可以“讀寫(xiě)”SDE用戶下的要素類名稱為:DLTB_G_410404 GRANT SELECT,UPDATE,INSERT,DELETE ON SDE.DLTB_G_410404 TO polyrole; GRANT polyrole to polyuser;
說(shuō)明:幫助上說(shuō)可以對(duì)行和列設(shè)置權(quán)限:相關(guān)參考:http://blog.csdn.net/linghe301/article/details/8751879
如果我非要對(duì)要素類的行和列設(shè)置權(quán)限怎么實(shí)現(xiàn)?
很簡(jiǎn)單,建立相關(guān)的視圖即可。變相的將對(duì)行和列的權(quán)限設(shè)置為不同的視圖來(lái)存儲(chǔ),這就轉(zhuǎn)變成上面增加相關(guān)的視圖圖層了。
參考:sdetable -o create_view
將兩個(gè)圖層保存為一個(gè)MXD,然后發(fā)布服務(wù)即可。
打開(kāi)ArcGIS Manger,設(shè)置用戶、角色、權(quán)限等。將Web用戶與角色關(guān)聯(lián)一下
在測(cè)試服務(wù)對(duì)象中設(shè)置安全,在服務(wù)右邊有個(gè)小鎖,點(diǎn)擊編輯權(quán)限
{"pushIdentityToDatabase" : "true" }
在測(cè)試階段我費(fèi)了很大周折,可能是對(duì)ArcGIS Server用的不是很多,也學(xué)到了很多東西。
1:直接在ArcGIS Desktop創(chuàng)建不同用戶的(Use GIS Services)
問(wèn)題:我直接將某個(gè)用戶下面的服務(wù)拖拽在ArcMap上看,會(huì)長(zhǎng)時(shí)間未響應(yīng),然后報(bào)如下錯(cuò)誤
這個(gè)不知道跟我的環(huán)境是否有關(guān)。
2:我在ArcGIS manger里面測(cè)試,也是利用不同的用戶登錄。
問(wèn)題:如果我清空Chome緩存信息,以不同用戶登錄可以查看不同的圖層,但是如果我再次登錄,就會(huì)直接訪問(wèn)緩存中保存的登錄和數(shù)據(jù)信息,每次清空緩存才能驗(yàn)證。
3:利用REST登錄(推薦)
http://服務(wù)器IP:6080/arcgis/rest/services/服務(wù)名稱/MapServer
直接在REST預(yù)覽即可
那么還有一個(gè)問(wèn)題,我是否可以使用ArcGIS Server的超級(jí)用戶(arcgis)來(lái)查看這個(gè)服務(wù)(看兩個(gè)圖層)?
如果有這個(gè)需求,那么就需要用戶在再數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)arcgis名字的數(shù)據(jù)庫(kù)用戶,然后設(shè)置相關(guān)角色才可以。
什么時(shí)候可以用?
比如以北京市地圖為例,可以發(fā)布了針對(duì)整個(gè)北京市的地圖服務(wù),但是上級(jí)領(lǐng)導(dǎo)希望海淀區(qū)的用戶只能瀏覽海淀的數(shù)據(jù),朝陽(yáng)的用戶只能瀏覽朝陽(yáng)的數(shù)據(jù)
1:創(chuàng)建針對(duì)海淀區(qū)和朝陽(yáng)區(qū)的服務(wù),這樣就增加了服務(wù)數(shù),但是也對(duì)服務(wù)器資源消耗更加多了
2:利用上面的方式,可以創(chuàng)建海淀或者朝陽(yáng)的數(shù)據(jù)視圖,然后還保存在一個(gè)服務(wù)里面,然后根據(jù)權(quán)限來(lái)訪問(wèn)不同的圖層。
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com