【问题标题】:Grant select on a table forcing WHERE在强制 WHERE 的表上授予选择
【发布时间】:2013-05-26 16:54:14
【问题描述】:

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

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

但我不知道这是否正确..

提前谢谢你。

【问题讨论】:

  • 您可能想要搜索“Oracle 行级安全性”。

标签: oracle procedure ora-06550


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 2016-08-17
    • 2019-12-18
    • 1970-01-01
    • 2019-04-13
    • 2014-08-10
    • 2010-09-16
    相关资源
    最近更新 更多