postgres权限问题

2w3kk1z5  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(307)

我在postgres中设置一个新用户时遇到了一些问题,其中一部分可能是我对postgres幕后工作的了解。我使用testbox和lucee来运行单元测试,在postgres超级用户下一切正常,但是在创建新用户并授予特权之后,单元测试失败了
这是我的密码:

CREATE USER test_user WITH PASSWORD 'postgres';
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA not_public TO test_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO test_user;
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA public TO test_user;
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA not_public TO test_user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO test_user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA not_public TO test_user;

单元测试从公共架构运行一个过程,该过程引用非公共架构中的表,但立即出错,并显示以下消息:

ERROR: permission denied for schema not_public Where: PL/pgSQL function p_unit__delete_test_production() line 18 at SQL statement

我为新用户/受让人运行了以下命令:

SELECT table_catalog, table_schema, table_name, privilege_type
FROM information_schema.table_privileges

并且过程中引用的所有模式的所有表都具有select、insert、update和delete权限。我的补助金中有没有遗漏一步?这是其他问题吗?感谢您的帮助!

cgh8pdjw

cgh8pdjw1#

尝试

GRANT USAGE ON SCHEMA not_public TO test_user;

请注意,错误消息 permission denied for schema not_public 在架构本身上,而不是在架构内的特定对象上。
GRANT ... ON ALL ... IN SCHEMA... 仅适用于该模式中已经存在的对象,这是与postgres的grant命令混淆的常见原因。

相关问题