相关疑难解决方法(0)

Postgres 15. 模式公共权限被拒绝

无法以非超级用户身份在公共架构中创建表

postgres - 超级用户。

我做了什么:

ALTER SCHEMA public owner to postgres;  

CREATE USER admin WITH PASSWORD 'my-password';   

GRANT USAGE, CREATE ON SCHEMA public TO postgres;   
GRANT USAGE, CREATE ON SCHEMA public TO admin;    

CREATE DATABASE mydb;    
GRANT ALL ON DATABASE mydb TO admin;
Run Code Online (Sandbox Code Playgroud)

特权:

postgres=# \dn+
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres        +| 
        |          | admin=UC/postgres    | 
(1 row)
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

在此输入图像描述

如何在公共模式中创建表?

sql postgresql debian postgresql-15

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

自动增量表列

使用Postgres,我试图AUTO_INCREMENT在SQL中自动编号我的主键.但是,它给了我一个错误.

CREATE TABLE Staff   (
  ID        INTEGER NOT NULL AUTO_INCREMENT,
  Name      VARCHAR(40) NOT NULL,
  PRIMARY KEY (ID)
);
Run Code Online (Sandbox Code Playgroud)

错误:

********** Error **********
ERROR: syntax error at or near "AUTO_INCREMENT"
SQL state: 42601
Character: 63
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

sql postgresql types auto-increment database-table

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

如何将视图的所有权限授予任意用户

如何为任意用户授予对所有函数和视图的读/选访问权限?

psql --user=postgres -d mydb -f myview.sql用来创建几个函数和视图,然后我运行:

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

获得所有权限后,我希望myuser现在可以访问postgres用户创建的功能和视图.但是,当我尝试访问它们时myuser,我得到了"关系允许拒绝..."错误.为什么是这样?

sql database postgresql grant pgadmin

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

授予PostgreSQL中特定数据库的权限

我正在从MySQL迁移到PostgreSQL并且已经打破了用户权限.我习惯使用以下命令为用户分配数据库的所有表的所有权限:

# MySQL
grant all privileges on mydatabase.* to 'myuser'@'localhost' identified by 'mypassword';
Run Code Online (Sandbox Code Playgroud)

在我看来,PostgreSQL 9.x解决方案涉及为"模式"分配权限,但我需要努力弄清楚究竟要发出什么SQL证明是过分的.我知道再花几个小时的研究会得出答案,但我认为每个从MySQL迁移到PostgreSQL的人都可以从网上至少有一个提供简单完整配方的页面中受益.这是我需要为用户发出的唯一命令.我宁愿不必为每个新表发出命令.

我不知道在PostgreSQL中必须以不同的方式处理哪些场景,所以我将列出我过去通常必须处理的一些场景.假设我们只想修改已创建的单个数据库的权限.

(1a)并非所有表都已创建,或(1b)表已经创建.

(2a)尚未创建用户,或(2b)已创建用户.

(3a)尚未将权限分配给用户,或者(3b)先前已将权限分配给用户.

(4a)用户只需要插入,更新,选择和删除行,或者(4b)用户还需要能够创建和删除表.

我已经看到了为所有数据库授予所有权限的答案,但这不是我想要的.拜托,我正在寻找一个简单的食谱,虽然我也不介意解释.

我不想授予所有用户和所有数据库的权限,因为这似乎是传统的快捷方式,因为当任何一个用户受到攻击时,该方法会破坏所有数据库.我托管多个数据库客户端并为每个客户端分配不同的登录.

看起来我还需要USAGE获得serial列的增加值的权限,但我必须以某种顺序授予它.我的问题变得更复杂了.

sql database postgresql privileges

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

所有者是否可以没有餐桌权限?

我们一直在尝试在其中一个数据库中创建许多角色和用户。有一次我遇到了这个问题,我发现很难重现。

它在数据库中是可重现的,但是当我创建一个新数据库并尝试相同的操作时,它不会发生:(

ALTER TABLE public.table_name OWNER TO role_name;

通常,在我们运行此查询之后。这table_name将由owned角色role_name/用户决定。

运行上述查询后,如果我们运行以下查询:

select grantee, table_catalog, privilege_type, table_schema, table_name 
from information_schema.table_privileges 
where table_name = 'table_name' 
order by grantee, table_schema, table_name
Run Code Online (Sandbox Code Playgroud)

我们将得到以下结果:

 role_name   | database_name   | INSERT       | public   | table_name
 role_name   | database_name   | DELETE       | public   | table_name
 role_name   | database_name   | SELECT       | public   | table_name
 role_name   | database_name   | UPDATE       | public   | table_name
 role_name   | database_name   | TRUNCATE     | public   | table_name
 role_name …
Run Code Online (Sandbox Code Playgroud)

sql postgresql privileges postgresql-13

4
推荐指数
1
解决办法
988
查看次数