【问题标题】:PostgreSQL grant select righs on function with no SELECT access to tablePostgreSQL 在没有 SELECT 访问表的情况下授予对函数的选择权限
【发布时间】:2015-04-11 17:16:46
【问题描述】:

我知道如何仅授予用户对选定表或视图甚至列的 SELECT 访问权限。另一方面,我不希望他们能够执行 SELECT column1, column2 FROM ..... 创建视图不是一种选择,因为 SELECT column1, column2 FROM view 将执行完全相同的操作。另一方面,我创建了一个 pgpsql 函数,它需要两个 ID 并查询同一个表,但最多只能从 DB 表中检索两行(对于 id=ID1 AND id=ID2)。有没有办法限制用户只使用这个函数来查询表,而不给他在这个表上的完全 SELECT 权限?

【问题讨论】:

    标签: postgresql postgresql-9.3 sql-grant


    【解决方案1】:

    最简单的解决方案是仅将表上的权限授予OWNER;这是 PostgreSQL 中的默认行为。

    然后您可以使用SECURITY DEFINER 创建一个函数,这意味着该函数以创建该函数的人的权限执行。如果该用户与表的所有者是同一用户,则该部分已完成。

    现在剩下的就是GRANT EXECUTE 的功能,任何人都需要访问数据。

    【讨论】:

    • 优秀。所以我将函数定义为 DB 表的所有者,并在函数定义上使用 SECURITY DEFINER。然后我将执行此功能授予受限用户。这样受限用户可以通过该函数查询 Db 表,但受限用户仍然没有对 DB 表的 SELECT 权限。我的理解正确吗?
    • 是的,没错。默认情况下,只有表的所有者才能访问它。通过在具有SECURITY DEFINER 子句的函数上授予EXECUTE 特权,该受限用户可以执行该函数(正如预期的那样),但对表的访问由函数的所有者执行。如果该所有者也是表的所有者,那么一切都很好,否则表所有者应该 GRANT SELECT 给函数的所有者。
    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 2017-07-06
    • 1970-01-01
    • 2023-02-23
    • 2017-05-11
    • 2012-07-09
    相关资源
    最近更新 更多