我是新的一般数据库,我需要一些帮助与用户权限。我用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;
任何帮助将不胜感激。先谢谢你了。
2条答案
按热度按时间gwbalxhn1#
默认情况下,函数以调用函数的用户的权限运行。指定
SECURITY DEFINER
以允许函数使用拥有该函数的用户的权限。92dk7w1h2#
错误是因为访问数据库的用户没有权限在“email”表上执行。函数本身需要额外的权限来执行查询。
您需要做的是向用户授予权限。这可以如下进行:
有关存储过程,请参阅here。