一般来说,我是数据库的新手,我需要一些有关用户权限的帮助。我用 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;
任何帮助将不胜感激。提前致谢。
默认情况下,函数以调用函数的用户的权限运行。指定
SECURITY DEFINER
以允许函数使用拥有该函数的用户的权限。
CREATE OR REPLACE FUNCTION LoadEmails()
RETURNS setof text
SECURITY DEFINER
AS $$
BEGIN
RETURN QUERY SELECT email FROM emails;
END
$$ LANGUAGE plpgsql;