如何在PostgreSQL中建只读账号

在PostgreSQL中并没有CREATE TABLE权限名称,这是与其它数据库不同的一个地方,PostgreSQL是通过控制是否在模式schema中上有CREATE控制用户的能否创建表的权限的,默认安装下,任何用户都有在模式public中CREATE的权限,所以要创建只读账号的第一步,我们要先去除在模式public中的CREATE权限:

REVOKE CREATE ON SCHEMA public from public;

下面的SQL创建了一个名为“readonly”的用户:

CREATE USER readonly with password 'query';

然后把现有的所有在public这个schema下的表的SELECT权限赋给用户readonly,执行下面的SQL命令:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

上面的SQL命令只把现有的表的权限给了用户readonly,但如果这之后创建的表,readonly用户还是不能读,需要使用下面的SQL把以后创建的表的SELECT权限也给用户readonly:

ALTER DEFAULT PRIVILEGES IN SCHEMA public grant select on tables to readonly;

注意:上面的过程只是把名称为public的schema下的表赋了只读权限,如果想让这个用户能访问其它schema下的表,需要重复执行:

GRANT SELECT ON ALL TABLES IN SCHEMA other_schema TO readonly; ALTER DEFAULT PRIVILEGES IN SCHEMA other_schema grant select on tables to readonly;