oracle數據庫下視圖授權


1. 需求提出

HIS與第三方系統進行集成時,某第三方系統需要訪問HIS數據庫的視圖而非全部的數據庫表。

HIS的數據庫為Oracle, 因此需要在Oracle中在原有用戶的基礎上,再增加一個用戶,該用戶僅能查看HIS中為其開放的視圖。這也是為了系統之間的安全考慮的。

2. 解決方案

1)以system用戶登錄oracle數據庫.

2)創建用戶並且為用戶賦予查看視圖的權限.

這里假設要創建一個tester用戶,登錄密碼為:“123456.

HIS需要開放的視圖是在原來用戶 outpatient下的,視圖名稱為:v_daily_charge.

此時,應該撰寫的SQL為:

 

--01: 創建tester用戶,並且初始密碼為123456.

create user tester identified by "123456";

--02: 賦予該用戶登錄數據庫的權限.

grant create session to tester;

--03: 賦予該用戶查看outpatient下的視圖v_daily_charge的權限.

grant select on outpatient.v_daily_charge to tester;

注意:在運行以上第三條SQL的時候,oracle數據庫有可能會報錯。

ORA-01720: 不存在對 emergency.t_cost表的授權選項。”

經過研究,出錯的原因應該是,tester用戶要訪問outpatient用戶的視圖,該視圖不僅會查閱outpatient用戶下的某些表,如t_user, t_dept表,而且還訪問了其他用戶的表,如emergency用戶下的t_cost表。

為了避免以上的錯誤,就需要在為tester用戶賦予查看outpatient的視圖權限前,先將outpatient視圖中需要訪問到的emergency用戶下的表的權限開放給outpatient用戶。

因此,在第三句SQL前還需要補充幾句:

--04: 由於在outpatient用戶下的視圖需要訪問另一個用戶emergency下的表,因此需要將emergency用戶下的表t_cost先授權給outpatienttester這兩個用戶.

grant select on emergency.t_cost to outpatient with grant option;

如果除了賦予tester用戶, 查看outpatient下視圖的權限外,還想再賦予tester用戶查看outpatient用戶下表t_user, t_dept表的權限,則需要增加以下的SQL:

--賦予tester用戶查看outpatient用戶下的t_usert_dept表的權限.

grant select on outpatient.t_user to tester;

grant select on outpatient.t_dept to tester;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM