PostgreSQL数据库角色和权限
来源:互联网 发布:python 里的key 编辑:程序博客网 时间:2024/04/30 01:36
PostgreSQL使用角色来管理数据库的访问权限,数据库角色跟操作系统用户是不相关的,数据库角色只是用来管理数据库。根据角色不同,一个角色可以看做是一个用户,或者一组用户。角色可以有数据库对象,例如表,视图,也可以把这些对象上的访问权限赋予其他角色,这样其他角色也可以访问不属于他自身的其他对象。
角色的概念替换了"用户"和"组"。在PostgreSQL 版本8.1之前,用户和组是独立类型的记录,但现在它们只是角色。任何角色都可以是 一个用户、一个组、或者两者。
1、创建角色
postgres=# create role zxy_1;
CREATE ROLE
2、查看当前的角色,可查看系统表pg_roles
postgres=# select rolname from pg_roles;
rolname
----------
postgres
zxy
(2 行记录)
注意:psql的元命令\du也可以查看当前角色
postgres=# \du
角色列表
角色名称 | 属性 | 成员属于
----------+--------------------------------------------+----------
postgres | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
zxy | 超级用户, 建立 DB
补充:postgres这个角色最初创建数据库系统时,默认创建的超级用户角色,在数据库创建完之后是通过它与数据库最先连接的,通过它连接之后,你才能创建更多的角色。
3、删除角色
postgres=# drop role rolename;
二、 角色属性
一个数据库角色可以有一系列属性,这些属性定义他的权限,以及与客户认证系统的交互。常见的属性有以下分类:
- 登陆(login):具有login属性的角色可以连接数据库,一个带有login属性的角色可以等同于“数据库用户”,因为数据库用户创建的时候默认自带login属性.
- 超级用户(superuser):超级用户拥有至高无上的权限,但是这个权限分配的时候,一定要小心,想要创建超级用户,必须使用带超级用户的角色去创建带“超级用户”的角色 .
- 创建数据库(createdb):创建数据库属性,顾名思义就是拥有“创建数据库”属性的角色可以创建数据库,对于超级用户的角色来说,自身可以创建数据库,不用带“创建数据库”属性 .
- 创建角色(createrole):带有“创建角色”属性的角色可以创建其他角色。一般带有“创建角色”属性的角色还可以删除和更改其他角色(删除和更改只限于普通用户)
- 口令(password):只有在客户认证方法要求与数据库建立连接必须使用口令的时候, 口令才比较重要.
注意:
- 关于login属性,除了创建数据库默认创建的postgres可以直接登陆,其他角色登陆数据必须有login属性,就算是“超级用户”角色都不能
- 一个角色的属性可以在创建后用ALTER ROLE修改,并不是一成不变的。详情可 参考\h create role 和\h alter role 来查看
- 创建一个具有CREATEDB和CREATEROLE权限, 但是并非超级用户的角色是一个很好的习惯, 你可以使用这个角色进行所有日常的数据库和角色管理。 这个方法避免了以超级用户操作时,发生误操作导致的严重后果.
练习
postgres=# create role zxy_1 login;
CREATE ROLE
postgres=# create role zxy_2 superuser;
CREATE ROLE
postgres=# create role zxy_3 createdb;
CREATE ROLE
postgres=# create role zxy_4 createrole;
CREATE ROLE
postgres=# create role zxy_5 password 'zxy_5';
CREATE ROLE
postgres=# \du
角色列表
角色名称 | 属性 | 成员属于
----------+--------------------------------------------+----------
postgres | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
zxy | 超级用户, 建立 DB | {}
zxy_1 | | {}
zxy_2 | 超级用户, 无法登录 | {}
zxy_3 | 建立 DB, 无法登录 | {}
zxy_4 | 建立角色, 无法登录 | {}
zxy_5 | 无法登录 | {}
赋予zxy_2密码和Login属性,则就可以登陆数据库
postgres=# alter role zxy_2 password 'zxy';
ALTER ROLE
postgres=# alter role zxy_2 login;
ALTER ROLE
postgres=# select current_role;
current_user
--------------
zxy_2
(1 行记录)
postgres=# select oid,rolname,rolsuper,rolcreaterole,rolcreatedb,rolcanlogin,rolpassword from pg_roles;
oid | rolname | rolsuper | rolcreaterole | rolcreatedb | rolcanlogin | rolpassword
-------+----------+----------+---------------+-------------+-------------+-------------
10 | postgres | t | t | t | t | ********
24577 | zxy | t | f | t | t | ********
24597 | zxy_1 | f | f | f | t | ********
24599 | zxy_3 | f | f | t | f | ********
24600 | zxy_4 | f | t | f | f | ********
24601 | zxy_5 | f | f | f | f | ********
24598 | zxy_2 | t | f | f | t | ********
(7 行记录)
三、权限
权限就是该用户或者角色是否对能某个对象做任何事情,这个能力代表的就是权限,权限允许你可以操作这个对象,你想要操作,则必须要赋予相应的权限。常见的一些权限如: SELECT,INSERT,UPDATE, DELETE, TRUNCATE, REFERENCES,TRIGGER,CREATE, CONNECT, TEMPORARY, EXECUTE, andUSAGE等等。
使用GRANT命令赋予权限,要撤销权限,使用REVOKE命令
postgres=# grant select on t_1 to zxy_1;
GRANT
zxy_1=> select* from t_1;
id | name
----+-------
1 | smith
10 | sott
(2 行记录)
postgres=# revoke select on t_1 from zxy_1;
REVOKE
zxy_1=> select* from t_1;
错误: 对关系t_1 权限不够
- PostgreSQL数据库角色和权限
- POSTGRESQL 数据库 角色 权限
- PostgreSQL角色和权限
- 【PostgreSQL】PostgreSQL学习手册(角色和权限)
- PostgreSQL数据库创建、删除、角色权限
- PostgreSQL的用户、角色和权限管理
- postgresql角色和权限相关---转载
- PostgreSQL学习手册(角色和权限)
- PostgreSQL学习手册(角色和权限)
- PostgreSQL学习手册(角色和权限)
- PostgreSQL学习手册(角色和权限)
- PostgreSQL学习手册(角色和权限)
- postgresql中角色和权限的问题
- PostgreSQL的用户、角色和权限管理
- postgreSQL角色权限控制
- postgresql角色与权限
- 数据库权限和角色模型
- 数据库权限和角色模型 .
- Invalid bound statement (not found):.....sysFunctionDao.getSysFunctionsById...<init>(MapperMethod.ja
- java学习是xml解析
- hdu6081 度度熊的王国战略(无向图全局最小割 stoer-wagner)
- vagrant provision 典型应用场景
- 神经网络入门(一)
- PostgreSQL数据库角色和权限
- Kotlin初探
- Java数组扩容算法及Java对它的应用
- 用时间加随机数作为文件名称
- VR开发-陀螺仪部分研究
- Ubuntu开机启动脚本
- HDU6090 Rikka with Graph(贪心,思路,2017 HDU多校联赛 第5场)
- javaweb 一些小节记录一
- SpringBoot的RabbitMQ消息队列: 四、第三模式"Publish/Subscribe"