我在 Postgres CLI 上运行了这些语句(我使用的是 PostgreSQL v13.1):
CREATE ROLE blog_user;
GRANT blog_user TO current_user;
我创建了一个函数
CREATE FUNCTION SIGNUP(username TEXT, email TEXT, password TEXT)
RETURNS jwt_token AS
$$
DECLARE
token_information jwt_token;
BEGIN
....
END;
$$ LANGUAGE PLPGSQL VOLATILE SECURITY DEFINER;
最后我授予了权限:
GRANT EXECUTE ON FUNCTION SIGNUP(username TEXT, email TEXT, password TEXT) TO anonymous;
我希望在我的模式/数据库中列出每个用户/角色的所有授权。\du
并\du+
显示基本信息,其中不包含有关最近进行的授权(在函数上执行)的信息。
虽然以下不是一个完整的解决方案(不包括列 privs,它没有函数签名),但您应该希望能够获得您要求使用的大部分内容:
在 PostgreSQL 中没有简单的方法可以做到这一点。您必须单独检查所有对象。
这个查询回答了我同样的问题:如何知道 acl on function ?希望它可以提供帮助。
但是,如果函数具有相同的名称但参数不同,则效果不佳。例如
dblink (text), dblink (text, boolean), dblink (text, text)
. 对于您的功能,您必须替换routine_schema NOT IN ('information_schema','pg_catalog')
为routine_name = 'your_function_name'