相关疑难解决方法(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万
查看次数

PostgreSQL 角色与用户,授予权限

我目前正在学习 PostgreSQL 和 MySQL 之间的差异,因为我有一个新项目,而且我还打算将我现有的软件从 MySQL 迁移到 PostgreSQL。我实际上已经开始创建一个 HTML 表,比较两者之间的命令(用于用户/数据库/命令提示符等)。在阅读了这里的答案后,我注意到它role似乎被用作一个组。与MySQL我有两个用户,基本公共(DELETEINSERTSELECTUPDATE权限),并与一对夫妇的额外权限的管理员用户。

所以基本上在 Windows 7 命令提示符下(仅限本地开发)...

  • 角色是特定于 PostgreSQL 的用户、组或松散使用的术语吗?
  • 对于数据库中的所有表,如何仅向特定用户授予特定权限?
  • 如何将数据库中所有表的所有权限授予特定用户?
  • 在使用GRANTREVOKE获得用户权限时,角色与用户相比如何(如果有的话)?

postgresql users

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

PostgreSQL 9.3.13,如何刷新不同用户的物化视图?

[我认为这个问题的根本原因是我不了解权限和特权......]

所以,为了设置舞台,我的设置是一个数据库,称之为MyDb

我有两个用户,spu1u1spu1是超级用户,u1是“普通”用户。MyDb的所有者是spu1。我想我还应该说u1具有从组角色继承的创建数据库和创建角色权限。

我有一个架构sch1,它是一个用户定义的架构。

在这个模式中,我有一个表,称为tbl1,还有一个物化视图,称为mvw1

TBL1的主人是SPU1,该mvw1的主人是U1


问题:

在当前设置中,如上所述,我无法将mvw1刷新为u1spu1。我只是得到以下有趣的错误(我已经广泛搜索了它,但没有找到任何可以完全解决我的设置的错误......)。

ERROR:  permission denied for relation tbl1
********** Error **********

ERROR: permission denied for relation tbl1
SQL state: 42501
Run Code Online (Sandbox Code Playgroud)

我发现

  1. 更改所有者mvw1SPU1,让我刷新为SPU1
  2. 运行下面的命令允许我将mvw1刷新为u1

我试图找出我需要授予普通用户u1缺少的权限(理想情况下所需的最低权限),以便我可以在以他们的身份登录时刷新此视图。

第一个选项虽然很高兴知道,但并不能解决我的问题。第二个选项似乎实际上是在向非超级用户授予超级用户权限,或者授予比我需要的更大的权限。

如果有人可以向我解释这里到底发生了什么(或指出我在解决问题所需的描述中遗漏了哪些信息),并让我知道我的第二个选择是否真的可行或更好的选择? …

postgresql permissions materialized-view errors postgresql-9.3

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

创建读写用户和只读用户

我正在尝试对 RDS 实例上的 PostgreSQL 数据库进行我认为常见的设置。我希望有:

  • 无论是在public架构上,还是在自定义架构上,我都不太关心
  • 读写用户
  • 只读用户
  • 读写用户应该能够在架构中创建表
  • 只读用户应该能够自动从这个新表中读取数据,即无需额外的操作GRANT

我尝试关注此AWS 博客文章此答案,但似乎遇到了困难。

我已尝试以下操作但无济于事,postgres用户是由 RDS 创建的具有角色的用户rds_superuser

-- Making sure roles can't do anything on the database without explicit grant
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE my_database FROM PUBLIC;
CREATE SCHEMA my_schema;

-- Read-write
CREATE ROLE read_write;

GRANT CONNECT ON DATABASE my_database TO read_write;
GRANT USAGE, CREATE ON SCHEMA my_schema TO read_write;

GRANT SELECT, INSERT, UPDATE, …
Run Code Online (Sandbox Code Playgroud)

postgresql permissions amazon-rds

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

GRANT ALL ON ALL TABLES IN SCHEMA 不允许用户查看表

我有一个非常简单的脚本来创建一个新数据库并创建一个新用户来访问这个数据库。这是由默认的 postgres 用户运行的。授予用户对数据库和模式的访问权限后,新创建的用户仍然无法看到\dtpsql 中使用的表。以下是脚本的一些片段,以显示我迄今为止尝试过的内容:

CREATE USER api WITH ENCRYPTED PASSWORD 'password';

ALTER DEFAULT PRIVILEGES 
    FOR USER api
    IN SCHEMA public
    GRANT ALL ON ALL TABLES TO api;


DROP DATABASE IF EXISTS new_db;
CREATE DATABASE new_db;


CREATE TABLE addresses (
    address_id INTEGER,
    address_line_1 VARCHAR(50) NOT NULL,
    address_line_2 VARCHAR(50),
    city VARCHAR(50) NOT NULL,
    state VARCHAR(2) NOT NULL,
    zipcode VARCHAR(12) NOT NULL,
    PRIMARY KEY (address_id)
);

-- Create more tables....

-- Added these in for good measure at the end:
GRANT …
Run Code Online (Sandbox Code Playgroud)

postgresql permissions psql users

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

无法更改默认权限

我按照以下步骤操作。

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

我如何为所有模式中的所有表授予权限

我想要

GRANT SELECT
    ON ALL TABLES
    TO foo;
Run Code Online (Sandbox Code Playgroud)

但是 postgres 告诉我“TO”有一个语法错误。它期望像这样的 GRANT:

GRANT SELECT
    ON ALL TABLES
    IN SCHEMA public
    TO foo;
Run Code Online (Sandbox Code Playgroud)

我们已经碎片化,使得表了一把publicshard123shard124一切有一个表my_table,并public.my_table为双方的父母shard123.my_tableshard124.my_table。对于公共模式,我已将 SELECT 授予 foo,但 foo 没有任何分片模式的权限。

我也做过:

ALTER DEFAULT PRIVILEGES
    FOR ROLE dba
    GRANT SELECT
    ON TABLES
    TO foo;
Run Code Online (Sandbox Code Playgroud)

...它应该自动授予从现在开始创建的任何新表和模式。

有 1000 < n < 10000 个分片/模式,因此为每个分片/模式单独授予是不切实际的。

如何为所有现有模式(所有分片)中的所有现有表授予角色?

或者更好的是,我可以为所有模式 GRANTLIKE 'shard%'吗?

permissions postgresql-9.2

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

无法创建读写 Postgresql 用户

我正在尝试在 Postgres 数据库中创建两个用户 - 一个具有对两个模式中所有表的读写访问权限,另一个具有对相同模式的读写创建(即,能够进行 DDL 更改)。

我目前有这些陈述。

CREATE SCHEMA
    schema_a;

CREATE SCHEMA
    schema_b;

CREATE ROLE read;
CREATE ROLE read_write;
CREATE ROLE read_write_create;

GRANT USAGE ON SCHEMA schema_a, schema_b TO read;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_a, schema_b TO read;

GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA schema_a, schema_b TO read_write;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA schema_a, schema_b TO read_write;

GRANT ALL ON SCHEMA schema_a, schema_b TO read_write_create;

GRANT read to read_write;
GRANT …
Run Code Online (Sandbox Code Playgroud)

schema postgresql permissions users

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

PostgreSQL 中 SQL Server 的 db_datareader/db_datawriter 相当于什么?

我正在将应用程序从 SQL Server 移植到 PostgreSQL。其中大部分很简单,因为应用程序只真正执行简单的选择、插入和更新。但是我需要创建一个用户来访问数据库。SQL Sever 代码像这样创建它的用户:

USE [master] CREATE LOGIN [ExampleUserName] WITH PASSWORD = 'ExamplePassword', CHECK_EXPIRATION=OFF, CHECK_POLICY=ON;
USE [ExampleDB];
CREATE USER [ExampleUserName] FOR LOGIN [ExampleUserName];
ALTER ROLE [db_datawriter] ADD MEMBER [ExampleUserName];
ALTER ROLE [db_datareader] ADD MEMBER [ExampleUserName];
Run Code Online (Sandbox Code Playgroud)

什么是 PostgreSQL 中的等价物?

postgresql permissions role

2
推荐指数
1
解决办法
795
查看次数