postgresql用户模式权限介绍_postgresql usage

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

2.创建一个普通用户

postgres=# create user test ENCRYPTED password 'test';
CREATE ROLE

3.为创建一个超级用户

test=# create user dsg superuser;
CREATE ROLE

4.创建一个普通用户,并且赋予相关权限

test=# create user dsg createdb createrole inherit password 'dsg';
CREATE ROLE

3.修改用户

1.查看修改用户语句

test=# \h alter user
Command:     ALTER USER
Description: change a database role
Syntax:
ALTER USER role\_specification [ WITH ] option [ ... ]
where option can be:
     SUPERUSER | NOSUPERUSER
   | CREATEDB | NOCREATEDB
   | CREATEROLE | NOCREATEROLE
   | INHERIT | NOINHERIT
   | LOGIN | NOLOGIN
   | REPLICATION | NOREPLICATION
   | BYPASSRLS | NOBYPASSRLS
   | CONNECTION LIMIT connlimit
   | [ ENCRYPTED ] PASSWORD 'password'
   | VALID UNTIL 'timestamp'
ALTER USER name RENAME TO new\_name
ALTER USER { role\_specification | ALL } [ IN DATABASE database\_name ] SET configuration\_parameter { TO | = } { value | DEFAULT }
ALTER USER { role\_specification | ALL } [ IN DATABASE database\_name ] SET configuration\_parameter FROM CURRENT
ALTER USER { role\_specification | ALL } [ IN DATABASE database\_name ] RESET configuration\_parameter
ALTER USER { role\_specification | ALL } [ IN DATABASE database\_name ] RESET ALL
where role\_specification can be:
   role\_name
 | CURRENT\_USER
 | SESSION\_USER

2.修改用户为超级用户

postgres=# alter user test superuser;
ALTER ROLE

3.将超级用户修改为普通用户

postgres=# alter user test nosuperuser;
ALTER ROLE

4.修改用户密码

test=# alter user dsg password 'test';
ALTER ROLE

5.修改用户名

test=# alter user dsg rename to dds;
NOTICE: MD5 password cleared because of role rename
ALTER ROLE

6.锁定/解锁用户,不允许/允许其登录

test=# alter user test nologin;
ALTER ROLE
test=# alter user test login;
ALTER ROLE

7.设置用户的连接数,其中0表示不允许登录,-1表示无限制

test=# alter user test connection limit 10;
ALTER ROLE

4.删除用户

1.直接删除用户

test=# drop user dds;
DROP ROLE

如果用户在数据库中有相关对象,不能直接删除,需要将相关对象所属修改到其它用户中

test=# drop user dsg;
ERROR: role "dsg" cannot be dropped because some objects depend on it
DETAIL: owner of table zzz.kkk
privileges for schema zzz

将dsg的所属用户修改为test:

test=# reassign owned by dsg to test;
REASSIGN OWNED

还需要把权限进行收回,再进行删除:

test=# revoke all on schema zzz from dsg;
REVOKE
test=# drop user dsg;
DROP ROLE

二.schema模式管理

首先介绍一下postgresql中的schema,postgresql中的schema和其它关系型数据库中的schema含义是一致的,在oracle中叫schema或者用户,只是oracle中schema和用户是始终一一对应.

在mysql中database和schema是一一对应的.postgresql中user和schema是可以不一致的,相对比其它数据库复杂一点.

在创建schema的时候,可以指定schema的所属用户,
默认的只有所属用户和超级用户才能在此schema进行对象操作,否则就需要授权.

1.使用\dn查看数据库的schema

test=# \dn
 List of schemas
 Name | Owner   
--------+----------
 brent | brent
 public | postgres
 suq   | suq
 zzz   | test
(4 rows)

2.创建schema

1.查看创建schema语法

test=# \h create schema
Command:     CREATE SCHEMA
Description: define a new schema
Syntax:
CREATE SCHEMA schema\_name [ AUTHORIZATION role\_specification ] [ schema\_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION role\_specification [ schema\_element [ ... ] ]
CREATE SCHEMA IF NOT EXISTS schema\_name [ AUTHORIZATION role\_specification ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role\_specification
where role\_specification can be:
   user\_name
 | CURRENT\_USER
 | SESSION\_USER

2.创建一个schema,并且设置所属用户为test:

test=# create schema zzz authorization test;
CREATE SCHEMA

3.删除schema

1.删除schema,如果schema中存在对象,则需要使用cascade选项:

test=# drop schema zzz;
ERROR: cannot drop schema zzz because other objects depend on it
DETAIL:  table zzz.test depends on schema zzz
HINT: Use DROP ... CASCADE to drop the dependent objects too.
test=# drop schema zzz cascade;
NOTICE:  drop cascades to table zzz.test
DROP SCHEMA

三.权限管理

postgresql中的权限可以大概分为以下几种:

SELECT:该权限用来查询表或是表上的某些列,或是视图,序列。

INSERT:该权限允许对表或是视图进行插入数据操作,也可以使用COPY FROM进行数据的插入。

UPDATE:该权限允许对表或是或是表上特定的列或是视图进行更新操作。

DELETE:该权限允许对表或是视图进行删除数据的操作。

TRUNCATE:允许对表进行清空操作。

REFERENCES:允许给参照列和被参照列上创建外键约束。

TRIGGER:允许在表上创建触发器。

CREATE:对于数据库,允许在数据库上创建Schema;对于Schema,允许对Schema上创建数据库对象;对于表空间,允许把表或是索引指定到对应的表空间上。

CONNECT:允许用户连接到指定的数据库上。

TEMPORARY或是TEMP:允许在指定数据库的时候创建临时表。

EXECUTE:允许执行某个函数。

USAGE:对于程序语言来说,允许使用指定的程序语言创建函数;对于Schema来说,允许查找该Schema下的对象;对于序列来说,允许使用currval和nextval函数;对于外部封装器来说,允许使用外部封装器来创建外部服务器;对于外部服务器来说,允许创建外部表。

ALL PRIVILEGES:表示一次性给予可以授予的权限。

1.schema权限管理

首先,如果某个用户需要访问某张表,
那么用户首先需要有访问该表所在schema的权限.默认只有schema的所属可以直接操作该schema,其它用户需要授权(public schma除外)

1.将schema的权限赋予给指定用户

例如,将创建对象权限赋予给brent用户:

test=# grant create on schema zzz to brent;
GRANT

例如,将schema中usage权限赋予给brent用户:

test=> grant usage on schema zzz to brent;
GRANT

例如,将schema中all权限赋予给brent用户,all表示一次性给予可以授予的所有权限

test=> grant all on schema zzz to brent;
GRANT

2.表权限管理

默认的,如果没有特别的授权,普通用户只能访问表所属为自己的表.超级用户可以访问任何表.如果要访问非自己的表,那么就需要对表进行授权.

当我们以brent用户想访问zzz模式下所属用户为test的abc表的时候就会报错:

test=> select user;
 user  
-------
 brent
 test=> select \* from zzz.abc;
ERROR: permission denied for relation abc                

1.grant,将表的查询和插入权限赋予给brent:

test=# grant select,insert on zzz.abc to brent;
GRANT

那么就可以进行查询了:

(1 row)
test=> \c test brent
You are now connected to database "test" as user "brent".
test=> select \* from zzz.abc;
 id 
----
(0 rows)

2.revoke,将表的查询权限收回:

test=# set search\_path=zzz;
SET
test=# \dt
       List of relations
 Schema | Name | Type | Owner 
--------+------+-------+-------
 zzz   | abc | table | test
 zzz   | kkk | table | test
(2 rows)
test=# revoke select on zzz.abc from brent;
REVOKE

3.角色管理

我们除了可以将表的权限赋予给用户,我们还可以将角色赋予给用户,那么用户就会拥有赋予角色的相关权限:

test=# grant test to brent;
GRANT ROLE
test=# revoke test from brent;
REVOKE ROLE

4.查询表权限角色列表

使用\dp或者\z命令,可以查看表对象上已经分配的权限列表,如下:

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取
















 1.grant,将表的查询和插入权限赋予给brent: 














   
 




test=# grant select,insert on zzz.abc to brent;





GRANT
















 那么就可以进行查询了: 














   
 




(1 row)








test=> \c test brent





You are now connected to database “test” as user “brent”.





test=> select * from zzz.abc;





id










(0 rows)



















 2.revoke,将表的查询权限收回: 














   
 




test=# set search_path=zzz;





SET





test=# \dt





List of relations





Schema | Name | Type | Owner





--------±-----±------±------





zzz   | abc | table | test





zzz   | kkk | table | test





(2 rows)








test=# revoke select on zzz.abc from brent;





REVOKE



















  


### 3.角色管理



 我们除了可以将表的权限赋予给用户,我们还可以将角色赋予给用户,那么用户就会拥有赋予角色的相关权限: 














   
 




test=# grant test to brent;





GRANT ROLE





test=# revoke test from brent;





REVOKE ROLE




















  


### 4.查询表权限角色列表



 使用\dp或者\z命令,可以查看表对象上已经分配的权限列表,如下: 
 














   
 





[外链图片转存中...(img-jUgsC4QN-1715816571454)]
[外链图片转存中...(img-jLchl5MJ-1715816571454)]
[外链图片转存中...(img-6zh1WRkj-1715816571454)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值