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,但同样,我不是超级用户,所以(我相信)我不能创造这样的东西。
有什么想法吗?
1条答案
按热度按时间kyks70gy1#
在检查数据库内部的任何权限之前,用户都要经过身份验证,所以你不能只在数据库内部进行身份验证。此外,由于你需要在数据库外部执行某些操作,所以你需要超级用户权限。
首先,如果我是你,我会重新考虑这个要求。它看起来很复杂,很麻烦;应该有一个更好的解决方案。
您可以使用
trust
或ident
身份验证进行无密码身份验证,但不能使其依赖于数据库中表的内容。它由pg_hba.conf
文件管理。所以你需要做的是在表上创建一个触发器,它通过
SECURITY DEFINER
以超级用户权限运行,并在表被修改时编辑(并重新加载!)pg_hba.conf
。这很复杂,容易出错,也很危险。