【问题标题】:more secure? select/update from postgresql table更安全?从 postgresql 表中选择/更新
【发布时间】:2017-11-29 10:56:05
【问题描述】:

我有 4 个用户......甚至更多 - 他们在定制公司工作。

表 A:

userName | companyName
---------|-------------
user1    | co1
-----------------------
user2    | co2
------------------------
...

我有很多表: tableB - 有产品,tableC 有其他东西......很多很多表。 每个表都有一个名为:companyName 的列。

我的问题: 问题1:如何编写?/exec 一个函数来选择/更新/插入各种可变大小的问题,这样每个用户都可以读/写只更新具有自己公司名称的记录。

我(认为我)可以使用:

 select * from tableC, userName, companyName from tableA ..... where   tableC.companyName=tableA.companyName and tableA.userName=currentuser();

但是如果一些用户进行查询(来自 PGAdmin 或类似的):

select * from tableC;

问题 2a:我想在服务器级别阻止这种可能性。 问题 2b:有没有办法为未知的参数列表编写函数(每个用于插入/更新/删除查询)?

问题2c:如何只为这个编写的函数添加tableA...对TableX的完全访问权限,独立于执行用户?

【问题讨论】:

标签: sql postgresql function


【解决方案1】:

https://www.postgresql.org/docs/current/static/ddl-rowsecurity.html

基于每个用户限制哪些行的行安全策略 可以由普通查询返回或插入、更新或删除 数据修改命令。此功能也称为行级 安全。默认情况下,表没有任何策略,因此如果一个 用户根据 SQL 权限拥有对表的访问权限 系统,其中的所有行都同样可用于查询或 更新。

作为例子

 CREATE POLICY user_policy ON users
    USING (true)
    WITH CHECK (user_name = current_user);

将使选择结果仅包含列 user_name 等于 current_user 的行

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多