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;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值