perl Linux上的Postgres,需要无密码的方式来授予对表的访问权限

9jyewag0  于 2023-10-24  发布在  Perl
关注(0)|答案(1)|浏览(183)

RHEL6_64上的PG 9.6.5
我必须忍受的限制:

  • 我不是一个超级用户,但我有一个超级用户。
  • 登录需要密码

假设我有一个名为“批准”的表...

create table approvals (approval_id text);

另一张table叫“格兰特”...

create table granters (linux_uid text);

我需要一个perl/DBI脚本,必须允许所有用户选择,但只有那些在“granters”表中的Linux_uid可以插入/更新/删除到“approvals”表.但当有人谁是在“granters”表运行perl脚本,我不希望他们必须输入密码. perl脚本可以验证,授权用户正在运行它使用'getlogin',这就足够了.
我可以为授予者创建角色,并在“approvals”表上授予他们选择/插入/更新/删除权限,但他们必须首先输入密码才能登录(数据库的一个限制是需要密码)。
我可以在插入、更新和删除之前创建触发器,这些触发器可以根据“granters”表中的uid列表检查运行perl脚本的人的id,然后在此基础上允许/拒绝尝试。但是我不能将Linux uid传递到与触发器相关联的存储过程中。像perlplu这样的东西可能允许我嗅出linux uid,但同样,我不是超级用户,所以(我相信)我不能创造这样的东西。
有什么想法吗?

kyks70gy

kyks70gy1#

在检查数据库内部的任何权限之前,用户都要经过身份验证,所以你不能只在数据库内部进行身份验证。此外,由于你需要在数据库外部执行某些操作,所以你需要超级用户权限。
首先,如果我是你,我会重新考虑这个要求。它看起来很复杂,很麻烦;应该有一个更好的解决方案。
您可以使用trustident身份验证进行无密码身份验证,但不能使其依赖于数据库中表的内容。它由pg_hba.conf文件管理。
所以你需要做的是在表上创建一个触发器,它通过SECURITY DEFINER以超级用户权限运行,并在表被修改时编辑(并重新加载!)pg_hba.conf。这很复杂,容易出错,也很危险。

相关问题