Win*_*upp 3 sql postgresql database-permissions
我在 PostgreSQL 中创建了一个只读用户,它仍然能够创建表:
我创建了一个测试数据库,然后创建了一个readonly2用户。只给它 2 个表的选择权限。当我以readonly2用户身份登录此数据库时,我仍然可以创建表:
create database test1
create user readonly2 with password 'readonly';
grant select on test1 to readonly2
grant select on test2 to readonly2
Run Code Online (Sandbox Code Playgroud)
其中test1和test2是测试数据库中的 2 个表。
现在,当我以readonly2用户身份登录测试数据库时,我可以创建表:
test=> create table test55 (id int);
CREATE TABLE
Run Code Online (Sandbox Code Playgroud)
我只想创建一个具有选择权限的只读用户。我不想授予创建表权限。
每个表都是在 Postgres 的模式中创建的。要创建表,角色必须具有schema的CREATE权限。根据文档:
创建
... 对于模式,允许在模式内创建新对象。
要在其中创建的表的默认架构是当前search_path.
search_path 中的第一个模式通常是与用户或模式同名的模式public。
并且public架构带有默认权限:
还可以允许用户在其他人的模式中创建对象。为此,
CREATE需要授予架构上的特权。请注意,在默认情况下,每个人都有CREATE,并USAGE在模式public特权。
大胆强调我的。
你可以改变它:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)
一定要先考虑后果……
(要么,要么角色是超级用户。)