天天看点

PostgreSQL 怎样创建“只读用户”?

PostgreSQL其实没有只读用户的语法,那么PostgreSQL提供了用户/角色属性来达到只读用户的效果,步骤如下:

1. 创建一个用户名为<readonlyuser>,密码为<your_own_password>的用户

CREATE USER <readonlyuser> WITH ENCRYPTED PASSWORD '<your_own_password>';           

2. 修改用户只读事务属性

ALTER USER <readonlyuser> SET default_transaction_read_only=on;           

3. 设置USAGE权限给到<readonlyuser>

GRANT USAGE ON SCHEMA public to <readonlyuser>                ;            

4. 在对应的数据库中,授予权限,如select。

GRANT SELECT ON ALL TABLES IN SCHEMA public TO <readonlyuser>;           

注意:这个语句有可能在使用云数据库RDS PostgreSQL版和HybirdDB for PostgreSQL会遇到ha_health_check(系统表,超级用户权限)授权失败,也可以用下面存储过程进行grant:

CREATE OR REPLACE FUNCTION grant_tables()
RETURNS int AS
$$
DECLARE
  r RECORD;
  count int;
BEGIN
  count := 0;
FOR r IN SELECT tablename FROM pg_tables where tablename not like 'ha_health_check' LOOP
  RAISE NOTICE 'tablename: %', r.tablename;
  EXECUTE 'grant  SELECT on ' || r.tablename || ' to <readonlyuser> ';
  count := count + 1;
END LOOP;

RETURN count;
END;
$$
LANGUAGE 'plpgsql' VOLATILE;

select * from grant_tables()           

更多参考 

PostgreSQL 批量权限 管理方法

继续阅读