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 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;(报错) 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;
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/61214ed224.html
