Sev*_*vas 5 sql-server oracle postgresql
使用 Oracle DB 一段时间后,我习惯使用 Oracle DB 应用程序上下文来实现访问限制。简而言之,登录时调用一个过程,将用户详细信息放入 Oracle 应用程序上下文中,如下所示:
DBMS_SESSION.SET_CONTEXT('context_name', 'user_id', user_id);
Run Code Online (Sandbox Code Playgroud)
然后可以通过创建视图来强制访问,这些视图将在上下文中查找以确定用户可以看到哪些行,如下所示:
CREATE VIEW users_vw AS
SELECT *
FROM users
WHERE user_id = SYS_CONTEXT('context_name', 'user_id');
Run Code Online (Sandbox Code Playgroud)
我现在已经不再使用 Oracle,而是在个人项目中使用 PostgreSQL,在工作中使用 SQL Server 2000 和 2008。谁能告诉我 PostgreSQL 或 SQL Server 是否提供相应的功能?
在 PostgreSQL 中,你也许可以使用SECURITY DEFINER-functions 来解决当前用户的问题?记录在这里:http ://www.postgresql.org/docs/8.4/static/sql-createfunction.html
编辑:
plperl 可用于会话变量。还有其他替代方案(请参阅评论中的链接),但 plperl 是其中最简单的。