- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有一种简单的方法来枚举特定角色具有某些访问权限的所有对象?我知道 pg_catalog 中的一组 has_*_privilege
函数,但它们没有完成这项工作,我想以相反的方式工作。实际上,我希望有一个 View 为特定角色提供 oid 和存储在 pg_class 中的任何内容的访问权限。
这样的 View 对于检查数据库的安全设置是否正确非常方便。通常,角色比关系少得多,因此恕我直言,检查角色要轻松得多。标准 PostgreSQL 发行版中不应该提供这样的实用程序吗?
根据源代码(acl.h),aclitem 是一个结构:
typedef struct AclItem
{ Oid ai_grantee; /* ID that this item grants privs to */
Oid ai_grantor; /* grantor of privs */
AclMode ai_privs; /* privilege bits */
} AclItem;
易于使用。但是,pg_type 将其列为用户定义的非复合类型。这是为什么?我现在看到的唯一方法是使用字符串函数解析 aclitem[] 数组。有没有更好的方法来分析 aclitem 数组?
添加信息浏览各种 PG 列表,很明显这个问题至少自 1997 年以来一直以各种形式出现(那时我们有电脑吗?有电视吗?),最相关的讨论主题是“Binary in/out for aclitem”在 2011 年初的 pgsql-hackers 上。作为 PG 的(技术熟练的)用户 - 而不是黑客 - 我很欣赏开发人员对维护稳定界面的关注,但线程中表达的一些关注有点远我的口味。系统目录中没有定义等于源代码中 AclItem 结构的 pg_acl 表的真正原因是什么?该结构最后一次更改是什么时候?我也知道 SE 的发展可能会改变安全处理的方式 - 当用户选择时,大概 - 所以我会满足于以这种方式呈现 acl 信息的东西,以便很容易枚举授予的特权特定用户,例如:
SELECT * FROM pg_privileges WHERE grantee = 16384;
像这样,它仍然可以是底层结构的抽象,因此引擎盖下的任何更改(大概)仍然可以转换为公开的接口(interface)。我会说,与 information_schema 方法没有太大区别。
干杯,帕特里克
最佳答案
没有开箱即用的 View ,但创建它所需的数据在系统目录中:
http://www.postgresql.org/docs/current/static/catalogs.html
比如pg_class
中有一个relacl
字段:
select oid::regclass, relacl from pg_class;
其他目录中也有类似的字段,即pg_type
中的typacl
和pg_proc
中的proacl
。
您可能想要使用另外两个目录,即 pg_authid
来了解哪些角色具有 super 用户权限,以及 pg_auth_members
来了解谁拥有什么角色。
(pg_default_acl
仅在对象创建期间使用,因此没有用。)
有几个与 aclitem 相关的内部函数可以在创建 View 时派上用场。您可以像这样在 psql
中列出它们:
\df+ *acl*
特别是 acleexplode()
。希望以下示例足以帮助您入门:
select oid::regclass,
(aclexplode(relacl)).grantor,
(aclexplode(relacl)).grantee,
(aclexplode(relacl)).privilege_type,
(aclexplode(relacl)).is_grantable
from pg_class
where relacl is not null;
可以通过先扩展acl行来优化,例如:
select oid::regclass,
aclitem.grantee
from (select oid, aclexplode(relacl) as aclitem from pg_class) sub
它将直接引导您获得所需的结果。
据我所知,这与使用内置工具一样好。 (当然,如果您想进一步优化它,您可以在 C 中编写自己的一组运算符。)
关于您的额外问题,恐怕世界上只有少数人能够回答这些问题,也就是核心开发者自己。他们出现在 pg 黑客名单上的次数比在这里多。
关于postgresql - 检索特定角色的所有对象权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315030/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
Android 权限(您在 list 中请求并在安装时显示的权限)是否与 root 用户在 root 手机上获得的 linux 权限相同? 更确切地说:如果我的手机上有 root 权限并且我有一个可以
我经常读到 VIEW 的一个目的是安全性:允许一些用户访问基础表,而其他用户只允许访问派生 View 。考虑到这一点,我设计了几个向外部用户提供受限数据集的 View 。 一切都很好,但在实践中这是行
在 Facebook API v2.3 中,“user_posts”听起来像是“user_status”的超集。是这样吗?如果我已经有“user_posts”,为什么还需要“user_status”?
在为 BLUETOOTH_CONNECT 请求运行时权限后,android 12 崩溃了,我在 Samsung Android 12 设备中遇到了这个问题。在其他低于 Android 12 的设备上运
请理解这个问题可能有点头晕,因为这是我第一次提问。另外,请理解语法可能很奇怪,因为我不擅长英语并使用翻译。 我是一个在 Android 工作室中使用 java 制作应用程序的人。 尝试使用蓝牙时出现连
我刚刚将我的 Magento 商店从 cPanel 移动到 DirectAdmin (Centos)。 我的问题现在是权限。以前在 cPanel 上,所有文件夹都设置为 755 和文件 644。这很好
我希望在我的 Django 项目中获得更细粒度的权限,但无法决定使用哪个应用程序。 我所拥有的是这样的: class Item(models.Model): name = models.Cha
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我们已经设置了一个 Github 应用程序,以便它使用 Github API 自动为另一个个人 Github 用户创建一个存储库。现在我们遇到了一个问题,不是每个人都想让我们完全读取他们所有的私有(p
假设我有一个网站想要访问 Facebook 的用户帐户信息。通常,用户会获得网站要求的所有权限,并且可以整体上允许或拒绝这些权限。 是否可以让用户选择(例如,通过授权屏幕上每个权限的复选框)他想授予网
平台下载地址:https://gitee.com/alwaysinsist/edp 权限介绍 权限实际上就是谁有权使用或是访问什么,这里的“谁”可以视作"授权对象",&qu
playstore 给我发这个消息 We've detected that your app contains the requestLegacyExternalStorage flag in the
我可以在没有 sudo 的情况下运行 docker,但有时它会再次请求权限,我无法在 VS 代码中附加容器 Got permission denied while trying to connect
我正在尝试在 Ubuntu 中的可执行文件上运行 gdb。但是,当我尝试在 gdb 中运行 run 时,出现以下错误。 /vagrant/unit_test: cannot execute: Perm
我的应用程序工作了一年,然后对 instagram 的 API 调用停止返回任何数据。 我使用以下 instagram 端点: https://api.instagram.com/v1/media/s
我使用 TFS 2012 并希望为 TFS 用户组设置以下权限。 允许创建新问题项。 拒绝创建新的任务项。 拒绝更改他的任务项,只能更改提醒时间、描述和状态。并且不能更改分配的用户、优先级和迭代。 我
我有一个谷歌计算引擎实例,我使用与我的 glcoud 帐户关联的 SSH key 通过 SFTP 连接到该实例。但是,我无法将任何文件上传到/var/www 目录,尽管我可以读取目录列表。/var/w
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我不确定如何正确处理以下情况: 我的程序通过安装程序安装 我在应用程序文件夹中创建SQLite数据库(程序启动时) 在某些配置中,我收到“ Attemt写入只读数据库”错误。这是权限问题,现在我通过将
我是一名优秀的程序员,十分优秀!