授予用户 ALTER 函数的权限

2024-05-22

我试着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;

The 手动开启ALTER FUNCTION http://www.postgresql.org/docs/current/interactive/sql-alterfunction.html很清楚:

您必须拥有该功能才能使用ALTER FUNCTION.改变一个函数的 架构,您还必须有CREATE新模式的特权。 要改变所有者,您还必须是直接或间接所有者 新拥有角色的成员,并且该角色必须具有CREATE函数模式的特权。 (这些限制强制要求 改变所有者不会做任何你不能通过删除和做的事情 重新创建该函数。然而,超级用户可以改变所有权 无论如何,任何功能。)

大胆强调我的。
您还需要一些基本权限来创建函数。根据文档: http://www.postgresql.org/docs/current/interactive/sql-createfunction.html

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

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

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

If您确实需要更改所有函数的所有权,这可以解决问题:

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 schema.
有关更多详细信息和解释,请参阅dba.SE 上有更完整的答案 https://dba.stackexchange.com/questions/9708/is-there-a-means-to-set-the-owner-of-all-objects-in-a-postgresql-database-at-the.
也密切相关:
在不知道参数数量/类型的情况下删除函数? https://stackoverflow.com/questions/7622908/drop-function-without-knowing-the-number-type-of-parameters/7623246#7623246

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

授予用户 ALTER 函数的权限 的相关文章

随机推荐

  • 为什么选择 & 符号作为 C++ 中的引用符号? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有谁知道为什么在 C 中选择 符号作为表示引用的方式吗 AFAIK 虽然我附近没有这本书 Stroustroup 没有解释这个选择 我觉得这有点
  • React.js 和 Ajax 之间的区别

    当我在 google 上搜索 React js 时 我得到的是 React js 是一个用于创建用户界面的框架 如果网站的某个特定部分经常更新 则意味着我们可以使用 React 但我很困惑 Ajax 仅用于此目的 我们可以使用 Ajax 更
  • 在 angularJS 中覆盖模块值/常量的最佳方法

    我用 angularJS 编写了一个模块 封装了所有后端通信 为了获得更大的灵活性 我将 api 前缀作为模块上的常量值 可能是值 因为我没有在配置阶段使用它 所以像 angular module myapp data constant a
  • 如何使用Codelite 11.0.0编译静态库?

    我想用我为 C 项目编写的所有函数编译一个静态库 我在 Ubuntu 16 04 上使用 CodeLite 11 0 0 配置为使用 GCC 作为编译器 我已按照中的说明进行操作CodeLite 的教程 http codelite org
  • 如何向 Firefox 添加自定义网络限制?

    这是 stackoverflow 的主题 因为它与开发工具有关 我想要做的是将卫星互联网配置文件加载到 F12 网络节流 比如 500ms 延迟和 25Mbit 的最大带宽 由于广泛使用require js 根据我对 Firefox 代码的
  • 确定列的累积最大值

    我正在尝试以下代码 df pd DataFrame 23 52 36 49 52 61 75 82 97 12 columns A B df C np where df A gt df C shift df A df C shift pri
  • 将 Flash 文件上传与 JSF 集成

    我看到我们可以通过flash文件上传来上传多个文件 喜欢SWF上传 http code google com p swfupload or YUI上传器 http yuilibrary com yui docs uploader 是否可以将
  • msbuild 脚本中的其他路径

    如何为 MSBuild 任务指定其他程序集引用路径 到目前为止 我有以下脚本 但无法弄清楚如何指定其他搜索路径
  • 内容丰富的 api markdown 转换为 HTML

    有没有什么简单的方法可以将 Markdown 文本从 Contentful api 转换为 html 代码以显示在 html 页面上 我尝试过使用 pagedown 和一些类似的技术 但似乎没有一个对我有用 我是 Contentful 的客
  • 重定向到上一页时如何发送变量数据

    在完成特定任务后 我使用以下代码将用户重定向到上一页 if isset SERVER HTTP REFERER this gt session gt set userdata previous page SERVER HTTP REFERE
  • 如何获取laravel 5.4中的所有头信息

    当我打印时 echo pre print r getallheaders 它给出输出 Host gt abc com User Agent gt Mozilla 5 0 Macintosh Intel Mac OS X 10 12 rv 5
  • 引用Scala中内部类的类型

    下面的代码尝试模仿DSL 的多态嵌入 http www daimi au dk ko papers gpce50 hofer pdf 而不是给出行为Inner 它被编码在useInner其封闭类的方法 我添加了enclosing方法 以便用
  • 如何验证单选按钮?

    我的 Rails 应用程序中有一个单选按钮 我想编写一个 java 脚本代码 在未选择任何选项时验证这一点 在你的 votes 类中做类似的事情 class Myvotes lt ActiveRecord Base validates vo
  • 如何在 C 程序中声明 unsigned int

    在这个链接上我遇到了http lxr linux no linux v2 6 36 include linux pci h L299 http lxr linux no linux v2 6 36 include linux pci h L
  • jqGrid - 如何将网格设置为最初不加载任何数据?

    如何创建网格但不加载任何数据 如果我省略url选项然后loadError回调被触发 目前我们设置url NoData json其中 NoData json 是一个静态文件 其中没有行 问题出在我们的loadComplete如果网格不包含数据
  • 什么是数组的浅拷贝

    当您调用 ArrayList 的 Clone 方法时 将创建列表的浅表副本 什么是数组的浅拷贝 如果 ArrayList 中有引用 则相同的引用将被复制到克隆的 ArrayList 中 对象不会被克隆
  • 性能:XmlSerializer、XmlReader、XmlDocument、XDocument

    我正在开发一个小型 Web 项目 并且想要读取 写入 XML 文件 性能是我的首要任务 我已经来到这篇很棒的文章 http www nearinfinity com blogs joe ferner performance linq to
  • 使用 Numpy 与 einsum 和 tensordot 进行相同的操作

    假设我有两个 3D 数组A and B形状的 3 4 N and 4 3 N 我可以计算沿第三轴的切片之间的点积 with einsum np eisum ikl kjl gt ijl A B 是否可以执行相同的操作numpy tensor
  • 当两个表非常相似时,什么时候应该将它们合并?

    我有事件和照片 然后对两者进行评论 现在 我有两个评论表 一个用于与事件相关的评论 另一个用于照片评论 架构与此类似 CREATE TABLE EventComments CommentId int EventId int Comment
  • 授予用户 ALTER 函数的权限

    我试着ALTER一个新用户的函数 我收到错误 ERROR must be owner of function ACases Error ERROR must be owner of function ACases SQL state 425