Postgresql 限制用户只能使用函数和过程

问题描述 投票:0回答:1

一般来说,我是数据库的新手,我需要一些有关用户权限的帮助。我用 C# 创建了一个桌面应用程序,它使用 npgsql 连接到我的 PostgreSQL 数据库。对数据库的每个命令都是函数或过程。我想为数据库创建一个用户,以在我的 C# 代码中使用,该用户仅有权执行那些特定的功能和过程,仅此而已。

我使用以下代码创建用户:

create user userdb with password 'blabla';
GRANT CONNECT ON DATABASE test TO userdb;
REVOKE ALL PRIVILEGES ON DATABASE test FROM userdb;
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM userdb;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM userdb;

然后我对每个程序和功能执行了以下操作:

GRANT EXECUTE ON FUNCTION LoadEmails() TO userdb;

当我运行任何过程或函数时,我收到错误 42501:表格电子邮件的权限被拒绝。

LoadEmails() 的示例代码:

CREATE OR REPLACE FUNCTION LoadEmails()
RETURNS setof text AS $$
BEGIN
  RETURN QUERY SELECT email FROM emails;
END
$$ LANGUAGE plpgsql;

任何帮助将不胜感激。提前致谢。

c# postgresql npgsql
1个回答
0
投票

默认情况下,函数以调用函数的用户的权限运行。指定

SECURITY DEFINER
以允许函数使用拥有该函数的用户的权限。

CREATE OR REPLACE FUNCTION LoadEmails()
RETURNS setof text
SECURITY DEFINER
AS $$
BEGIN
  RETURN QUERY SELECT email FROM emails;
END
$$ LANGUAGE plpgsql;
© www.soinside.com 2019 - 2024. All rights reserved.