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下的表,因此需要將
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;