2016-03-08 25 views
1

我們正在建立一個Oracle 11g數據存儲庫,用戶通過ODBC通過多個Microsoft Access前端連接到視圖(從2003到2010的MS Access版本)。 Microsoft Access前端安裝在網絡驅動器上,並通過公開的快捷方式複製到本地Citrix會話。是否可以使用Oracle和MS Access創建視圖級權限?

單個Access前端文件(每個用戶打開一個單獨的副本)將連接到數據存儲庫中的多個視圖,每個前端將擁有多個擁有不同權限的用戶,這些用戶應該是基於用戶或角色的。

由於傳統的VBA錯誤,無法編譯MS Access前端。

如果需要更多信息,請讓我知道 - 我擔心這個問題過於簡單。

回答

1

我不知道您的問題的訪問部分,但視圖可以配置爲顯示或隱藏基於用戶角色或權限。有幾種不同的方式,但他們都需要至少一條信息:

當您連接到Oracle時,您是誰?您是否以Active Directory,通用角色或其他方式成員身份登錄?

傳統方式是讓每個用戶擁有一個Oracle帳戶。然後在Oracle中創建角色,併爲角色授予對視圖的選擇特權。通過向用戶授予角色完成。這給view_level讀。

要實現行級權限,這裏是僞代碼中的一個示例。這並不意圖是完整的或編譯:

  • 用戶被授權通過具有在前端的Active Directory帳戶和密碼(訪問)
  • 在數據庫中是AD用戶
  • 表的表角色的角色
  • 表用戶有權限,如讀取,更新
  • 表,刪除角色的
  • 表和權限
  • 我們如果你能簡化的東西(也就是說,如果你已經閱讀並更新,你可以兩者都做)

一個行級許可視圖可沿

CREATE OR REPLACE VIEW my_view as 
SELECT various columns from ...... 
WHERE GET_USER_PERMISSIONS(parameter1_in, parameter2_in) = 1; 

和線條來構造Ë添加劑權限功能可能是像

CREATE OR REPLACE FUNCTION 
GET_USER_PERMISSIONS(parameter1_in NUMBER, parameter2_in NUMBER) 
RETURN NUMBER IS 
v_username VARCHAR2(50); 
v_count NUMBER(9); 
v_can_read NUMBER(9) := 0; 
BEGIN 
SELECT SYS_CONTEXT('USERENV','SESSION_USER') 
INTO v_username 
FROM DUAL; 

select count(arp.permission_value) 
into v_count 
from app_user au, 
app_user_role aur, app_role_permission arp 
where au.user_id = aur.user_id 
and aur.role_id = arp.role_id 
and au.user_id = v_username 
and arp.permission_value = 'READ'); 
IF v_count => 1 
THEN 
    v_can_read := 1; 
END IF; 

RETURN v_can_read; 
END; 

舉個例子,如果你有200家企業和20個用戶和每個用戶的一個或多個,你需要在你的權限表建立這個公司的有動作的一個或多個組合和然後用自定義用戶功能實現。

當然,還有更復雜的方法來做到這一點,包括使用Oracle Virtual Private Database(許可功能)的單個列掩碼,但我懷疑這太多了。

+0

這對我來說很好。我很猶豫回答,因爲我對Oracle的使用經驗非常有限,但我確信它必須具有與SQL Server上的「Windows身份驗證」選項等效的功能。一個小問題是,可能不需要爲Access前端提供密碼,因爲用戶在登錄Windows網絡時已經通過了身份驗證。他們的AD憑證應該已經可供Access前端使用,然後可以將它們傳遞給Oracle數據庫。 –

+0

@GordThompson這個問題並沒有給我們很多關於用戶如何驗證的細節,我不熟悉Access角色模型,所以我只是添加了到達Oracle的最低要求:authentication – kevinsky

+0

@kevinsky我對它的理解(原諒我的錯誤,我不是一個專家,只是分配給這個人的那個人)是,用戶通過Windows端的AD組進行身份驗證,然後通過Oracle中的服務帳戶進行身份驗證。 –

相關問題