默认创建用户可以登陆所有数据库,且拥有select,insert,update,delete权限 普通针对表授权,例如给默写表授权select,对授权表仅有select权限,但并不限制自己进行其他建表操作,为了处理这个问题,应该执行以下操作
初始化权限
dba账号登陆postgres
库回收postgres,template0,template1的连接权
revoke connect on database postgres,template0,template from public;
建库并回收权限
此时新库没有建好,所以dba账号登陆postgres库进行建库并回收权限操作
create database db;
revoke connect on database db from public;
回收新库权限
如果是第一次建立数据库,则应该到对应的 新库 中执行回收权限
revoke all privileges on schema public from public;
创建用户并授权
此步骤应该在 新库 中执行,revoke与grant会在库对应的schema下进行权限操作:
# 创建用户
$do$
BEGIN
if not exists (select from pg_catalog.pg_roles where rolename = "heihei" ) then
create user %s with password "heihei";
end if;
end
$do$
#usage授权
grant usage on schema public to "heihei";
#连接授权
grant connect on database db to "heihei";
#存量授权
grant select,update,insert,delete on all tables in schema public to "heihei";
#增量授权
alter default privileges in schema public grant select,update,insert,delete on tables to "heihei";
#sequences授权,仅能对select跟update进行授权,需要提前判断
alter default privileges in schema public grant select[,update] on sequences to "heihei";
grant select[,update] on all sequences in schema public to "heihei";
以上,即可对存量及增量进行pgsql授权管理