1. 程式人生 > 其它 >oracle資料庫下檢視授權

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;