授予用户更改功能的权限

胡安·卡洛斯·奥罗佩萨

我尝试ALTER使用新用户使用函数,但出现错误:

ERROR:  must be owner of function ACases
********** Error **********

ERROR: must be owner of function ACases
SQL state: 42501

我必须授予用户权限才能ALTER使其正常工作吗?我发现的唯一方法是使用户成为OWNER该函数的使用者

但是,在这种情况下,只有一个用户(所有者)可以使用ALTER该功能。那么我将如何更改OWNER所有功能?

CREATE OR REPLACE FUNCTION public."ACases"(caseid integer)
  RETURNS boolean AS
$BODY$
DECLARE
BEGIN
        RETURN FALSE;
END;
$BODY$
  LANGUAGE plpgsql;
ALTER FUNCTION public."ACases"(integer) OWNER TO postgres;

GRANT ALL PRIVILEGES ON FUNCTION public."ACases"(integer) TO user_name;
欧文·布兰德斯特

关于该手册的内容ALTER FUNCTION很明确:

您必须拥有要使用的功能ALTER FUNCTION要更改函数的架构,您还必须CREATE对新架构具有特权。要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色必须CREATE对函数的架构具有特权。(这些限制规定,更改所有者不能通过删除并重新创建功能来完成您无法做的任何事情。但是,超级用户仍然可以更改任何功能的所有权。)

大胆强调我的。
您还需要几个基本特权才能创建函数。每个文档:

为了能够定义功能,用户必须具有USAGE语言特权。
...

为了能够创建函数,您必须USAGE对参数类型和返回类型具有特权。

简单的解决方案是更改超级用户的功能(默认超级用户为postgres,但任何用户可以成为超级用户。)

如果您确实需要更改所有功能的所有权,则可以做到这一点:

SELECT string_agg('ALTER FUNCTION '
            || quote_ident(n.nspname) || '.' 
            || quote_ident(p.proname) || '(' 
            || pg_catalog.pg_get_function_identity_arguments(p.oid)
            || ') OWNER TO foo;'
          , E'\n') AS _sql
FROM   pg_catalog.pg_proc p
JOIN   pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE  n.nspname = 'public';
-- AND p.relowner <> (SELECT oid FROM pg_roles WHERE rolname = 'foo')
-- AND p.proname ~~ 'f_%'

仅限public架构。
有关更多详细信息和说明,请参考dba.SE上的此更完整的答案
也密切相关:
DROP FUNCTION不知道参数的数量/类型?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对用户权限授予结果执行功能?

来自分类Dev

授予用户更改网络设置的权限

来自分类Dev

如何授予用户更改IP地址的权限?

来自分类Dev

授予apache用户权限

来自分类Dev

如何授予用户更改系统日期和时间的权限?

来自分类Dev

授予单个用户写权限

来自分类Dev

授予单个用户写权限

来自分类Dev

如何授予用户root权限?

来自分类Dev

授予用户更改视图和SP的权限,但拒绝在sql中创建/删除用户表

来自分类Dev

如何授予用户更改目录中文件/目录所有权的权限

来自分类Dev

Angular with asp.net mvc URL 更改安全权限授予用户

来自分类Dev

哪种软件负责检查文件的权限以授予用户访问权限或不授予用户访问权限?

来自分类Dev

哪种软件负责检查文件的权限以授予用户访问权限或不授予用户访问权限?

来自分类Dev

区分每个apache用户并授予权限

来自分类Dev

android shell已被授予超级用户权限

来自分类Dev

授予用户访问分区上目录的权限

来自分类Dev

授予用户访问passwd命令的权限

来自分类Dev

如何为每个用户授予不同的权限?

来自分类Dev

授予用户访问分区上目录的权限

来自分类Dev

授予用户访问passwd命令的权限

来自分类Dev

授予用户无密码或sudo的rm权限

来自分类Dev

向表授予用户读写权限

来自分类Dev

向TFS用户授予ManageBuildResources权限

来自分类Dev

文件权限-授予特定用户的异常问题

来自分类Dev

向新用户授予root权限

来自分类Dev

向非root用户授予cpusets权限

来自分类Dev

如何为不同的用户授予权限

来自分类Dev

如何使用 drush 授予用户权限

来自分类Dev

向特定用户授予设备权限,但不授予其他用户访问权限

Related 相关文章

热门标签

归档