我不知道您的問題的訪問部分,但視圖可以配置爲顯示或隱藏基於用戶角色或權限。有幾種不同的方式,但他們都需要至少一條信息:
當您連接到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(許可功能)的單個列掩碼,但我懷疑這太多了。
這對我來說很好。我很猶豫回答,因爲我對Oracle的使用經驗非常有限,但我確信它必須具有與SQL Server上的「Windows身份驗證」選項等效的功能。一個小問題是,可能不需要爲Access前端提供密碼,因爲用戶在登錄Windows網絡時已經通過了身份驗證。他們的AD憑證應該已經可供Access前端使用,然後可以將它們傳遞給Oracle數據庫。 –
@GordThompson這個問題並沒有給我們很多關於用戶如何驗證的細節,我不熟悉Access角色模型,所以我只是添加了到達Oracle的最低要求:authentication – kevinsky
@kevinsky我對它的理解(原諒我的錯誤,我不是一個專家,只是分配給這個人的那個人)是,用戶通過Windows端的AD組進行身份驗證,然後通過Oracle中的服務帳戶進行身份驗證。 –