PostgreSql 创建数据库、用户、授权

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

psql -U postgres

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

postgres=# \c
You 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 mydb
You 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;(报错)
GRANT
postgres=# GRANT CREATE ON ALL TABLE TO myuser;(报错)
GRANT

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

postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA myuser TO myuser;
GRANT
postgres=# GRANT SELECT ON ALL SEQUENCES IN SCHEMA myuser TO myuser;
GRANT
postgres=# 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;

猜你喜欢

转载自blog.csdn.net/qq_37597428/article/details/134173715