相关疑难解决方法(0)

关系 <table> 的权限被拒绝

我在 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表时,出现错误:

permission denied for relation users
Run Code Online (Sandbox Code Playgroud)

我尝试运行:

ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;
Run Code Online (Sandbox Code Playgroud)

但它没有帮助。我究竟做错了什么?为什么数据库所有者没有权限查询自己的数据库?

编辑:我bspu现在升级为超级用户,所以我可以继续工作。任何进一步的指导表示赞赏。

postgresql permissions

22
推荐指数
1
解决办法
11万
查看次数

通过 PostgreSQL 中的视图和触发器跟踪当前用户

我有一个 PostgreSQL (9.4) 数据库,它根据当前用户限制对记录的访问,并跟踪用户所做的更改。这是通过视图和触发器实现的,并且在大多数情况下效果很好,但是我在需要INSTEAD OF触发器的视图上遇到了问题。我试图减少问题,但我提前道歉,这仍然很长。

情况

到数据库的所有连接都是通过单个帐户从 Web 前端建立的dbweb。连接后,角色将通过SET ROLEWeb 界面更改为对应的人,所有此类角色都属于组角色dbuser。(有关详细信息,请参阅此答案)。让我们假设用户是alice

我的大部分表都放置在一个架构中,在这里我将调用该架构private并属于dbowner. 这些表不能直接dbuser被其他角色访问,但可以被其他角色访问dbview。例如:

SET SESSION AUTHORIZATION dbowner;
CREATE TABLE private.incident
(
  incident_id serial PRIMARY KEY,
  incident_name character varying NOT NULL,
  incident_owner character varying NOT NULL
);
GRANT ALL ON TABLE private.incident TO dbview;
Run Code Online (Sandbox Code Playgroud)

特定行对当前用户的可用性alice由其他视图确定。一个简化的例子(可以减少,但需要以这种方式来支持更一般的情况)是:

-- Simplified case, but in principle could join multiple tables to determine allowed ids …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger view

12
推荐指数
1
解决办法
4780
查看次数

标签 统计

postgresql ×2

permissions ×1

trigger ×1

view ×1