我有一个包含用户数据的表(电子邮件,姓名,姓名,用户名,密码..),我想让每个用户只看到他自己的数据(比如查看他的个人资料)。我一直试图这样做:
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”)。但我看不出问题出在哪里..
我考虑过以这种方式为每个用户创建一个VIEW
CREATE VIEW userRow.USERNAME.V_DATOSALUMNO AS SELECT * FROM CAMP.USERS WHERE COD_USUARIO = ' || userRow.COD_USUARIO || ';';
但我不知道这是不是正确的方法..
提前谢谢。
答案 0 :(得分:1)
我不明白你给视图的名字,但代码应该是:
CREATE VIEW my_view_name
AS
SELECT *
FROM CAMP.USERS
WHERE COD_USUARIO = SYS_CONTEXT('USERENV', 'SESSION_USER')
当然,如果你没有腌制和散列密码那么你就错了。