前置
pg/og中,围绕角色进行权限的管理,它可以被看作时一个user或者一组user。区分role、user、group。user和group是pg8.1之前的两个实体,role是那之后唯一存在的实体。现在user和role等价。
初始化
数据库刚创建的时候,会自动创建一个超级用户角色postgres(pg)/omm(og)。任何操作都是从该用户开始的。
注意1:
不要使用超级用户,而是创建一个具有createdb、createrole的角色进行日常管理,以避免误操作带来的危险。
注意2:
创建database、创建角色算是特殊的权限,要与后文介绍的可授予的权限区分开来。
实验前置
创建实验用户:nineuser
创建实验数据库:nine
创建实验schema:nine
创建实验表:testafter
create user nineuser with password '12qw.12qw';
create database nine;
\c nine
create schema nine;
set search_path='nine';
create table testafter(id int);
实验1
问题研究:实验创建的对象都是由超级用户omm创建的。那么我们现在用nineuser登录nine库,select查看schema为nine下的表可以吗
gsql -U nineuser -d nine -r
set search_path='nine';
\dt
select * from testafter1;
答:对于刚创建的用户对于任何库来说只能\d、\dn查看对象描述。而对于select是没有权限的,如上如select会报错。
实验2
实验研究:赋予usage权限schema:nine给nineuser,会发生什么。
gsql -r
\c nine
grant usage on schema nine to nineuser;
gsql -U nineuser -d nine -r
set search_path='nine';
select * from testafter1;
答:根据上图实验结果可以看到,给了usage权限, 该用户还是无法查看对应schema下的对象表。那这里就要说下一个实验点:usage和select的区别。
实验3
实验研究:usage和select的区别,为什么usage后还要赋予select
gsql -r
\c nine
grant select on schema nine to nineuser;
gsql -U nineuser -d nine -r
set search_path='nine