请,
我在空闲时间在 supbase(PG 13.3) 中开发 PoC,尽管我将主要功能分解为更小的功能(出于重用目的),但我希望应用程序/客户端只能访问其中的三个(“公共”功能)。所以大部分功能只被这三个主要功能使用。
考虑到托管解决方案(RDS 或 Google Cloud SQL),限制对应用程序/客户端的访问仅限于这三个功能并阻止它们查看和执行其他“私有”功能的最佳方法是什么。
我用谷歌搜索了它,但还没有找到答案。
任何帮助将非常感激。
谢谢
请,
我在空闲时间在 supbase(PG 13.3) 中开发 PoC,尽管我将主要功能分解为更小的功能(出于重用目的),但我希望应用程序/客户端只能访问其中的三个(“公共”功能)。所以大部分功能只被这三个主要功能使用。
考虑到托管解决方案(RDS 或 Google Cloud SQL),限制对应用程序/客户端的访问仅限于这三个功能并阻止它们查看和执行其他“私有”功能的最佳方法是什么。
我用谷歌搜索了它,但还没有找到答案。
任何帮助将非常感激。
谢谢
您可以采取两种方法:
将您不希望用户使用的辅助功能放在不在的不同模式中,search_path
并且不要记录它们。
那么它们只能用不同的模式限定来调用,所以它们不会被意外调用。但是,这并不能阻止用户使用这些功能,只是不鼓励他们。
REVOKE
辅助功能的权限,PUBLIC
仅授予主要功能的所有者。然后将这些主要功能声明为SECURITY DEFINER
(并确保对其进行设置!search_path
)。
这种方法的主要缺点是所有函数都作为所有者执行,因此您不能使用 PostgreSQL 的正常权限检查来确保调用者不会访问它没有权限的任何数据。
我个人更喜欢第一种方法。