1

我有一个包含用户数据(电子邮件、姓名、姓氏、用户名、密码..)的表,我想允许每个用户只看到他自己的数据(比如查看他的个人资料)。我一直在尝试这样做:

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 || ';';

但我不知道这是否是正确的方法..

先感谢您。

4

1 回答 1

1

我不明白你给视图起的名字,但代码应该是:

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

当然,如果您没有对密码进行加盐和散列处理,那么您就大错特错了。

于 2013-05-26T17:57:50.437 回答