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先授權給outpatient和tester這兩個用戶.
grant select on emergency.t_cost to outpatient with grant option;
如果除了賦予tester用戶, 查看outpatient下視圖的權限外,還想再賦予tester用戶查看outpatient用戶下表t_user, t_dept表的權限,則需要增加以下的SQL:
--賦予tester用戶查看outpatient用戶下的t_user和t_dept表的權限.
grant select on outpatient.t_user to tester;
grant select on outpatient.t_dept to tester;