DB2行级访问控制:如何传递用户ID

时间:2016-06-10 13:07:19

标签: database db2

在我们的Web应用程序中,我们希望使用DB2行级访问控制来控制谁可以查看内容。每个表都包含一个名为userId的列,其中包含用户ID。我们希望登录用户只能看到带有ID的行usereId列。我已经看过使用DB2 session_iduser的db2权限示例,例如以DB2给出的Banking示例:

CREATE PERMISSION EXAMPLEBANKING.IN_TELLER_ROW_ACCESS
ON EXAMPLEBANKING.CUSTOMER FOR ROWS WHERE BRANCH in (
  SELECT HOME_BRANCH FROM    EXAMPLEBANKING.INTERNAL_INFO WHERE EMP_ID = SESSION_USER
)
ENFORCED FOR ALL ACCESS
ENABLE; 

我们的表动态更新,因此我们不知道添加或删除了哪一行,因此我们不知道表中的所有用户ID是什么。

在任何给定时间,不同的用户都会登录到Web查看从表中检索的信息,上面的权限声明只以SESSION_USER为输入,我可以将其更改为类似Java函数的参数哪个人可以将任意id传递给权限?如果没有,那么我如何在任意时间处理不同的登录用户?或者我只是在新用户登录时动态更改SESSION_USER(使用“db2 set”??)?如果是这样,这是这种用例的最佳实践吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

由于所讨论的用户ID是应用程序提供的,而不是源自数据库,因此使用等于DB2授权ID的SESSION_USER将不合适。相反,您可以将CLIENT_USERID变量用作described here

如果在应用程序中使用连接池,这可能会变得有点棘手,因为每次从池中获取连接并重置之后必须设置该变量,然后再将其返回到池中。

答案 1 :(得分:0)

查看Trusted Contexts,这就是它们存在的原因。链接的文章相当陈旧(您现在可以使用PHP,ruby等可信上下文)。