这是我的问题:
我拥有由用户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声明之间有什么区别? 是否有单独的许可我可以单独授予这项工作?
感谢。