Sql 博士后特权问题

Sql 博士后特权问题,sql,postgresql,lucee,testbox,Sql,Postgresql,Lucee,Testbox,我在postgres中设置一个新用户时遇到了一些问题,其中一部分可能是我对postgres幕后工作的了解。我使用TestBox和Lucee来运行单元测试,在postgres超级用户下,一切都按预期工作,但是在创建了新用户并授予了特权之后,单元测试失败了 这是我的密码: CREATE USER test_user WITH PASSWORD 'postgres'; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA not_pu

我在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_公共模式中的表,但立即出错,并显示以下消息:

 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权限。我的助学金中有没有遗漏一步?这是其他问题吗?感谢您的帮助

试试看

GRANT USAGE ON SCHEMA not_public TO test_user;
请注意,错误消息
schema not_public的权限被拒绝
位于架构本身上,而不是架构内部的特定对象上


另外,
GRANT。。。总之。。。在模式中…
仅对该模式中已存在的对象有效,这是与postgres的GRANT命令混淆的常见原因。

谢谢,Daniel。所以,如果我想授予对特定模式上所有函数的访问权,我必须向用户授予对模式的使用权,而不是授予模式中的所有功能?@user2921015:通常,您可以同时授予这两种功能。在这里可以看到一个很好的答案: