连接数据库(超级管理员 postgres)

psql -U postgres

查看当前登录用户 / 数据库

postgres=# \cYou are now connected to database "postgres" as user "postgres".
mydb=# select current_database(); current_database------------------ mydb(1)
postgres=# select user;postgres=# select current_user; current_user-------------- postgres(1 行记录)

上述两种命令均可。

创建数据库(mydb)

postgres=# create database mydb;CREATE DATABASE

默认有一publicschema。

切换到指定Database,创建schema(与用户名同名【租户】)

postgres=# \c mydbYou are now connected to database "mydb" as user "postgres".postgres=# create schema myuser;CREATE SCHEMA

\l 列举数据库
\dt 列举表
\d tblname 查看表结构
\di 查看索引

创建用户(与schema同名【租户】)(创建用户时可以同时赋予权限)

postgres=# create user myuser with password '1234';CREATE ROLE

在PostgreSQL 里没有区分用户和角色的概念。CREATE USERCREATE ROLE 的别名,这两个命令几乎是完全相同的,唯一的区别是
CREATE USER 命令创建的用户默认带有LOGIN属性,
CREATE ROLE 命令创建的用户默认不带LOGIN属性。

角色属性(Role Attributes)(属性定义了角色的权限)
属性说明
login只有具有 LOGIN 属性的角色可以用做数据库连接的初始角色名。
superuser数据库超级用户
createdb创建数据库权限
createrole创建或删除其他普通的用户角色(超级用户除外)
replication做流复制的时候用到的一个用户属性,一般单独设定。
password在登录时要求指定密码时才会起作用,比如md5或者password模式,跟客户端的连接认证方式有关
inherit用户组对组员的一个继承标志,成员可以继承用户组的权限特性

查看角色信息:\du\du+ 查看,也可以查看系统表 select * from pg_roles;

授权

授权用户的schema使用权:

postgres=# GRANT USAGE ON SCHEMA myuser TO myuser;GRANT

授权用户数据库权限:(此时拥有数据库的操作权限,可以创建schema,但是没有表的操作权限)

postgres=# GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;GRANT

赋给用户全部表的所有权限:(建表、删表、表数据的增删改查等权限)

postgres=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA myuser TO myuser;GRANT

赋给用户个别表的所有权限:

postgres=# GRANT ALL ON mytable TO myuser;GRANT

赋给用户建表权限:(全部表、具体表的创建权限)

postgres=# GRANT CREATE ON DATABASE mydb TO myuser;GRANT
postgres=# GRANT CREATE ON TABLE mytable TO myuser;(报错)GRANTpostgres=# GRANT CREATE ON ALL TABLE TO myuser;(报错)GRANT

授权用户所有表、序列、函数查询、执行权限:

postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA myuser TO myuser;GRANTpostgres=# GRANT SELECT ON ALL SEQUENCES IN SCHEMA myuser TO myuser;GRANTpostgres=# GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA myuser TO myuser;GRANT

普通用户登录(租户登录)

psql -U myuser -d mydb

注意:此时用户是属于 mydb 的,连接是必须指定 database。

创建表

mydb=> create table myuser.dept(no int, dname varchar(30));

回收所有授权

收回用户在SCHEMA下所有表的所有权限:

postgres=# REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA myuser FROM myuser;

收回用户在数据库的所有权限:

postgres=# REVOKE ALL PRIVILEGES ON DATABASE mydb FROM myuser;