列出用户可以执行的所有功能

时间:2013-09-12 16:14:43

标签: postgresql psql

我想要一个用户可以执行的每个可能功能的完整列表。

如果我在psql中以用户身份连接,我可以使用\df来获取数据库中的函数列表。但是这不列出MAX(),COUNT(),pg_advisory_lock()等函数。它还列出了用户首先无法执行的函数。

1 个答案:

答案 0 :(得分:3)

嗯,列表非常广泛,但您可以使用以下查询来实现此目的:

SELECT oid::regproc
FROM pg_proc
WHERE has_function_privilege(oid,'execute');

has_function_privilege函数,带有两个参数,检查函数(作为第一个参数提供)是否具有对当前用户的特权(从第二个参数)。您还可以使用带有三个参数的变量,并将用户视为第一个:

SELECT oid::regproc
FROM pg_proc
WHERE has_function_privilege('your_user_name',oid,'execute');

当然,我们可以像psql那样改进输出(改编自psql的查询):

SELECT n.nspname as "Schema",
  p.proname as "Name",
  pg_catalog.pg_get_function_result(p.oid) as "Result data type",
  pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types",
 CASE
  WHEN p.proisagg THEN 'agg'
  WHEN p.proiswindow THEN 'window'
  WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger'
  ELSE 'normal'
END as "Type"
FROM pg_catalog.pg_proc p
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE pg_catalog.has_function_privilege(p.oid, 'execute')
ORDER BY 1, 2, 4;