将 EXECUTE 授予许多 PostGIS 函数
我有一个基于 MapServer 的 Web 应用程序,它使用 PostGIS 作为底层数据库扩展。现在我想要一个用于 MapServer 的专用数据库角色,因为我不想通过 postgres 超级用户访问数据库。该角色应该只具有公共表的 SELECT 权限(这很容易实现)和公共 PostGIS 函数的 EXECUTE 权限。
出现了几个问题:所有 PostGIS 相关函数是否都存储在数据库的公共模式中,或者还有其他需要考虑的吗?
如何从数据库的 information_schema 或 pg_catalog 中提取所有函数信息 - 即函数名称、参数数量和名称?我需要此信息来将函数(参数)上的 GRANT EXECUTE 授予 MapServerUser 语句!
先感谢您!!!
I have a Web Application which is based on MapServer, which uses PostGIS as underlying database extension. Now I want to have a dedicated database role which is used for MapServer, cause I don't want to access the database via the postgres superuser. This role should only have SELECT permission on public tables (which is easy to achieve) and EXECUTE permissions on public PostGIS functions.
Several questions arise: Are ALL the PostGIS relevant functions stored in the public schema of a database or is there anything else to consider?
How can I extract all the functions information - i.e. function name, number and names of arguments - from the information_schema or the pg_catalog of the database?! I need this information for the GRANT EXECUTE on function(args) to MapServerUser statements!
Thank you in advance!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 PostgreSQL 8.4.x 中:
通过使用 -E 参数运行 psql(显示隐藏查询)然后运行 \df 命令来找到。
另外,PostgreSQL 中的“公共”模式就是这样命名的。它没有什么特殊意义。这是一个坏名字。您需要注意的是“公共”角色(全部大写)。虽然表不会自动被授予 PUBLIC 角色,但我的经验是 PUBLIC 自动获得使用 SECURITY INVOKER 定义的函数的执行权限。
In PostgreSQL 8.4.x:
Found by running psql with the -E parameter (show hidden queries) and then running the \df command.
Also, the "public" schema in PostgreSQL is just named that way. It carries no special meaning. It's a bad name. What you DO need to look out for is the "PUBLIC" role (all caps). While tables are not automatically granted the PUBLIC role, my experience is that PUBLIC automatically gets execute permission on functions defined with SECURITY INVOKER.