相关疑难解决方法(0)

Postgres 中的权限被拒绝

我将用户添加myuser到 Postgres。

然后我mydatabase在 pgAdmin III GUI 中添加了数据库并从备份文件中恢复。所以拥有者mydatabase是超级用户postgres

然后我试图给所有的访问权和修改mydatabasemyuser。我psql以用户身份登录postgres

psql -d template1 -U postgres  
Run Code Online (Sandbox Code Playgroud)

然后我运行了这个查询:

GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser
Run Code Online (Sandbox Code Playgroud)

现在我可以myuser用来记录,但如果我尝试一个简单的查询,我会得到这个错误:

ERROR:  permission denied for relation table_name
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?你能帮我解决吗?

postgresql permissions

34
推荐指数
2
解决办法
14万
查看次数

关系 <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万
查看次数

授予对数据库所有表的访问权限

我最近想与服务器的一个用户共享定期访问权限和我认识到,一个简单的CREATE USERGRANT ALL ON DATABASE命令没有让他运行一个简单SELECT的数据。

我想将给定数据库中所有表的权限授予指定用户,但我不确定授予他对整个架构的访问权限是否是最好的主意,public因为我不知道这是否允许某种特权升级。有没有其他办法?

postgresql best-practices permissions access-control

16
推荐指数
1
解决办法
6万
查看次数

在 Redshift 中的所有表上授予 SELECT

我正在尝试为SELECTRedshift 中的组分配权限。所以我在该组中创建了一个组和一个用户:

CREATE GROUP data_viewers;
CREATE USER <user> PASSWORD '<password>' IN GROUP data_viewers;
Run Code Online (Sandbox Code Playgroud)

现在我想让这个组能够从任何表中读取数据:

GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC TO GROUP data_viewers;
Run Code Online (Sandbox Code Playgroud)

命令返回GRANT。现在,当我以新创建的用户身份连接到 Redshift 并发出问题时,SELECT * FROM something.something;我得到:

架构某物的权限被拒绝

我尝试授予某些东西的权限:GRANT SELECT ON ALL TABLES IN SCHEMA something TO GROUP data_viewers;但这并没有改变任何东西。


如何允许我组中的用户SELECT访问架构中任何表中的数据?

permissions redshift

13
推荐指数
2
解决办法
4万
查看次数

在 PostgreSQL 8.4 中执行触发器函数需要什么权限?

在 PostgreSQL 8.4 中执行触发器函数需要什么权限?

似乎为角色设置的权限与执行触发器功能无关。我想我有一天看到执行触发器函数所需的特权是 EXECUTE 特权,但对于表的所有者,而不是执行触发调用触发器函数的触发器的操作的实际角色。

我找不到解释这一点的文档部分,有什么帮助吗?

postgresql trigger stored-procedures permissions postgresql-8.4

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

继承默认权限:角色 A 的*任何成员创建的每个表都可以由角色 B 读取

如果我这样做...

ALTER DEFAULT PRIVILEGES
    FOR ROLE engineering
    IN SCHEMA reference
    GRANT SELECT ON TABLES to analytics;
Run Code Online (Sandbox Code Playgroud)

我得到...

该语法运行并具有有效含义。它的实现方式是,每当engineering 角色创建一个表(在reference模式中)时,该角色的任何成员都reporting将自动拥有对该表的读取访问权限。但要使其发挥作用,您必须在创建表时以角色身份登录或模拟(set session authorizationset role) 。engineering

我理解postgres 实现这一点的方式背后的基本原理。他们希望每个角色/用户设置自己的默认值。默认值是一种方便的简写,因此用户不必为他们创建的每个表设置权限。Postgres 甚至允许某人为他们可以模拟的任何角色设置默认值(因此超级用户可以为每个人设置默认值)。这非常强大,但是 postgres 不想让它变得太强大。他们仍然希望人们必须为每个用户的默认值发出单独的命令。他们希望人们认真思考他们为他们提供这种便利的每一位用户。

但我想要 ...

但是,我已经认真考虑过,我确实想为整个团队提供这些便利。我想要一个命令,让工程团队中的每个用户都继承这些默认权限。然后,每次他们中的一个创建一个表时,每个报告成员都会自动读取该表。事实上,当我第一次发现可以包含该子句时,这就是我解释语法的方式FOR ROLE engineering。但默认值不会被继承。

或者,我也对一个解决方案感兴趣,无论谁(无论他们位于哪个团队)在模式中创建一个表reference,该角色的所有成员都可以读取该表reportingreporting因此,在这种变体中,即使我无法(直接)控制谁授予这些权限(以及为什么我想要这样做?),我仍然可以打开架构。如果我有这个解决方案,我仍然可以有效地将其限制为engineering团队成员(如果他们是架构中唯一具有创建权限的人)reference


问题

我是否遗漏了某些内容(例如替代语法)?或者还有其他解决方法吗?

我对任何解决方案(甚至构建自定义扩展)持开放态度,只要它不属于以下两个类别之一:

解决方案并没有真正设置“默认”

即每次团队成员engineering登录或创建表时,他们都必须执行一些额外的命令来处理权限(例如在启动会话时更改工程角色)

解决方案并没有真正继承到整个团队 …

postgresql

8
推荐指数
1
解决办法
3475
查看次数

无法更改默认权限

我按照以下步骤操作。

  1. 我安装了 PostgreSQL。
  2. 我是postgres通过 ( sudo -i -u postgres)登录的
  3. new_user通过 shell 脚本创建了新用户createuser --interactive
  4. 我授予该用户创建数据库的权限。
  5. 我创建了数据库:createdb new_db.

现在我想授予new_user权限,能够对他自己创建的表执行所有默认的 DML 操作(下面的命令取自这个问题),所以我输入:

postgres=# ALTER DEFAULT PRIVILEGES FOR new_user IN SCHEMA 
    public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO new_user;
Run Code Online (Sandbox Code Playgroud)

但是得到了一个错误:

ERROR:  syntax error at or near "new_user"
LINE 1: ALTER DEFAULT PRIVILEGES FOR new_user IN SCHEMA public GRANT...
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这个命令不起作用。

postgresql permissions

5
推荐指数
1
解决办法
4543
查看次数

更改角色的默认权限

我有一个名为 Blackacre 的数据库和两个可以访问它的角色:johnrolejanerolejanerole已被授予ALL特权,而johnrole仅被授予SELECT特权。

问题是当来自janerole的用户创建一个新表时,来自johnrole的用户不能SELECT从新表中创建。

ERROR:  permission denied for relation mopery
Run Code Online (Sandbox Code Playgroud)

我尝试以ALTER DEFAULT不同的方式使用来自动化:

ALTER DEFAULT PRIVILEGES FOR ROLE johnrole IN SCHEMA public
   GRANT SELECT ON TABLES TO johnrole;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO johnrole;
ALTER DEFAULT PRIVILEGES FOR ROLE johnrole GRANT SELECT ON TABLES TO PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON …
Run Code Online (Sandbox Code Playgroud)

postgresql permissions postgresql-9.5

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

如何为带有索引的 Postgres 表创建仅插入用户?

这是我建议的架构:

CREATE TABLE Surveys (
    id serial primary key,
    user_email citext,
    survey_data jsonb,
    created_at timestamp default current_timestamp
);
CREATE INDEX surveys_email_idx ON Surveys(user_email);

CREATE USER SurveyWriter;
Run Code Online (Sandbox Code Playgroud)

我知道我需要:

GRANT INSERT ON dbname.Surveys TO SurveyWriter;
Run Code Online (Sandbox Code Playgroud)

但我还需要:

GRANT INSERT, UPDATE ON dbname.surveys_email_idx to SurveyWriter;
Run Code Online (Sandbox Code Playgroud)

还有什么我没有想到的吗?

schema postgresql permissions

5
推荐指数
1
解决办法
326
查看次数

如何允许用户访问 Postgres 中的非拥有对象?

我正在创建一个 pre-prod Postgres 数据库,并希望确保访问用户具有有限的访问权限。

我想以这样的方式设置表的访问用户不能CREATEDROPALTER对象。目前,我可以看到将所有权更改为另一个用户的唯一方法,例如postgres然后以某种方式仅授予所需的权限:

 ALTER TABLE mytable SET OWNER TO postgres;
 REVOKE connect ON DATABASE mydatabase FROM PUBLIC;
 GRANT USAGE, SELECT, UPDATE ON ALL TABLES IN SCHEMA public TO dbuser;
 GRANT connect ON DATABASE mydatabase TO dbuser;
Run Code Online (Sandbox Code Playgroud)

问题是当我执行上述操作SELECT时,当我与应用了授权的用户连接时,我无法做一个简单的事情。例如:

 select * from mytable;
Run Code Online (Sandbox Code Playgroud)

产量:

ERROR:  permission denied for relation mytable
Run Code Online (Sandbox Code Playgroud)

如何做到这一点?
此外,我应该使用public?以外的命名模式吗?

postgresql permissions access-control postgresql-9.5

3
推荐指数
1
解决办法
9854
查看次数

Postgres 中的插入和只读表

我想创建一个“不可变”的Postgres数据库,用户只能insert/ select(写入/读取)数据,但不能update/ delete(更改/删除)。

我知道有FOR UPDATE锁,但不知道如何使用它。

假设我有下表,如何使其不可变(或者,如果我理解正确,如何FOR UPDATE永久使用锁)?

CREATE TABLE account(
 user_id serial PRIMARY KEY,
 username VARCHAR (50) UNIQUE NOT NULL,
 password VARCHAR (50) NOT NULL,
 email VARCHAR (355) UNIQUE NOT NULL,
 created_on TIMESTAMP NOT NULL,
 last_login TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)

postgresql permissions read-only-database

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