postgres:访问函数中的模式对象

时间:2014-10-02 04:06:29

标签: function postgresql permissions

这是我的问题:

我拥有由用户1拥有的架构A,它拥有所有对象。

我已经创建了由用户2拥有的架构B.

我已授予User 2对User 1拥有的对象的所有权限。

以User2身份登录时,我可以选择,更新等用户1拥有的表格。 有道理。

现在,当以用户2身份登录时,我想创建一个功能,即从用户1拥有的表中选择一些数据。

CREATE OR REPLACE FUNCTION -- <-- function owned by User2 (in schema B)
  RETURNS TABLE(
  table columns...)
 AS
$func$ 
BEGIN

        RETURN QUERY
        SELECT * 
        FROM table;  -- <-- table owned by User 1 (in schema A)

END;
$func$
LANGUAGE plpgsql
;

选择所有单独工作正常。 但是当我把它们放在一个函数中时,我得到错误:

ERROR: permission denied for schema schema A
SQL state: 42501

在我看来,用户2可以访问用户1的表...因为个人选择,插入等...工作正常。

只有当我将这些语句放在函数中时,我才会收到权限错误。

显然我错过了许可,或者我的一般设计是错误的。

有没有人有任何见解?

非常感谢。

编辑:

这些是我最初发行的补助金:

GRANT usage on schema schemaA to user2;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA schemaA TO user2;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA schemaA TO user2;
GRANT SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA schemaA TO user2;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA schemaA TO user2;

发出此授权后,我的权限错误消失了:

Grant ALL on schema schemaA to user2;

那么,我发布的赠款与Grant ALL声明之间有什么区别? 是否有单独的许可我可以单独授予这项工作?

感谢。

0 个答案:

没有答案