我在 psql 中运行了以下 SQL:
CREATE USER bspu LOGIN;
CREATE DATABASE bsp OWNER bspu;
GRANT ALL PRIVILEGES ON DATABASE bsp TO bspu;
\c bsp
CREATE TABLE users (
id SERIAL PRIMARY KEY,
client_id VARCHAR(20) NOT NULL,
api_key VARCHAR(100) NOT NULL,
api_secret VARCHAR(100) NOT NULL,
auth_token VARCHAR(128) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
当我以 身份登录bspu并尝试查询users表时,出现错误:
Run Code Online (Sandbox Code Playgroud)permission denied for relation users
我尝试运行:
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;
Run Code Online (Sandbox Code Playgroud)
但它没有帮助。我究竟做错了什么?为什么数据库所有者没有权限查询自己的数据库?
编辑:我bspu现在升级为超级用户,所以我可以继续工作。任何进一步的指导表示赞赏。
以下似乎可能是一种相当普遍的情况,但我还没有看到任何解决方案。
我有一个 PostgreSQL 数据库,其中包含特定于 的视图,$user以便根据某些特定于数据库的 ACL 逻辑来限制数据。数据库通常通过 JDBC 访问,特别是在 Web 界面的 JSP 中。用户通过 LDAP 密码认证登录网站。
我想要的是利用从 JDBC 连接到数据库的视图。但通常这个中间层连接是使用通用用户创建的,而不是特定于登录网站的人。我相信在 Oracle 中“正确”的方法是Proxy Authentication,但 AFAIAA 没有与 PostgreSQL 等效的方法。那么该怎么做呢?
想到了一些想法:
还有其他(希望更好)的建议吗?
我有一个 PostgreSQL 9.3 数据库,带有支持 Web 应用程序和 GeoServer 的 PostGIS 扩展。我创建了三个用户。
用于访问参考数据模式中的数据的只读用户。
用于访问和更新保存应用程序状态的架构中的数据的读/写用户。
GeoServer 正在访问的地图数据的读/写/创建用户。
前两个工作正常。第三个我有问题。以用户 GeoServer 身份登录可以创建新表就好了。但随后无法读取它们。我必须专门进入并手动应用权限。这对于应用程序来说是站不住脚的。用户可以创建一个他们无法读取的表对我来说没有多大意义。所以我认为我错过了一个不明显的权限设置。我的谷歌搜索让我得到了大量关于设置只读用户的奇怪说明,但不是为了这个。