我在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;单元测试从引用not_public架构中的表的公共架构中运行一个过程,但会立即出错,并显示以下消息:
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权限。是不是我的奖励金漏掉了什么?这是其他东西的问题吗?如有任何帮助,我们不胜感激!
发布于 2020-05-28 04:59:34
试一试
GRANT USAGE ON SCHEMA not_public TO test_user;请注意,错误消息permission denied for schema not_public位于模式本身,而不是模式内的特定对象。
此外,GRANT ... ON ALL ... IN SCHEMA...只适用于该模式中已经存在的对象,这是与postgres的GRANT命令混淆的常见原因。
https://stackoverflow.com/questions/62051677
复制相似问题