连接数据库(超级管理员 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
默认有一
public
schema。
切换到指定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 USER
为CREATE 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;