2013-05-26 29 views
1

我有一個包含用戶數據(電子郵件,姓名,用戶名,密碼..)的表格,我想授予每個用戶僅查看他自己的數據(如查看他的個人資料)。我一直試圖做這種方式:格蘭特選擇強迫表WHERE

create or replace 
PROCEDURE PR_OWNDATA AS 
BEGIN 
FOR userRow IN (SELECT COD_USUARIO, USERNAME FROM CAMP.USERS) LOOP 
    EXECUTE IMMEDIATE 'GRANT SELECT ON CAMP.USERS TO "' || userRow.USERNAME || '" WHERE COD_USUARIO = ' || userRow.COD_USUARIO || ';'; 
END LOOP; 
END PR_OWNDATA; 

它不工作(ORA 06550 「行%S,列%S:\ n%S」)。但我看不出哪裏出了問題..

我想用這種方式

CREATE VIEW userRow.USERNAME.V_DATOSALUMNO AS SELECT * FROM CAMP.USERS WHERE COD_USUARIO = ' || userRow.COD_USUARIO || ';'; 

大約爲每個用戶創建一個視圖,但我不知道這是否是正確的方法..

預先感謝您。

+0

您可能想要搜索'Oracle row-level security'。 – Mat

回答

1

我不明白你給的名稱來看,但代碼應該是:

CREATE VIEW my_view_name 
AS 
SELECT * 
FROM CAMP.USERS 
WHERE COD_USUARIO = SYS_CONTEXT('USERENV', 'SESSION_USER') 

當然,如果你不醃製和散列該密碼,然後你這樣做都是錯的。