数据库角色
PostgreSQL使用角色的概念管理数据库访问权限。一个角色可以被看成是一个数据库用户或者是一个数据库用户组,这取决于角色被怎样设置。
角色可以拥有数据库对象(例如,表和函数)并且能够把那些对象上的权限赋予给其他角色来控制谁能访问哪些对象。
此外,还可以把一个角色中的成员资格授予给另一个角色,这样允许成员角色使用被赋予给另一个角色的权限。
1. 数据库角色
数据库角色在概念上已经完全与操作系统用户独立开来。
要创建一个角色,可使用CREATE ROLE SQL 命令:
CREATE ROLE name;//DROP ROLE name;
createuser name;//dropuser name
要决定现有角色的集合,检查pg_roles系统目录,例如:
SELECT rolname FROM pg_roles;
[root@mysqlhq soft]# su - postgres
Last login: Mon Nov 19 10:43:07 CST 2018 on pts/1
-bash-4.2$ psql
psql (9.5.2)
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
exampledb | dbuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/dbuser +
| | | | | dbuser=CTc/dbuser
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
postgres=# SELECT rolname FROM pg_roles;
rolname
----------
postgres
dbuser
(2 rows)
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
dbuser | | {}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
2. 角色属性
一个数据库角色可以有一些属性,它们定义角色的权限并且与客户端认证系统交互。
login privilege
只有具有LOGIN属性的角色才能被用于一个数据库连接的初始角色名称。
CREATE ROLE name LOGIN;
CREATE USER name;
(CREATE USER和CREATE ROLE等效,除了CREATE USER默认假定有LOGIN,而CREATE ROLE不这样认为)。
superuser status
一个数据库超级用户会绕开所有权限检查,除了登入的权利。最好用一个不是超级用户的角色来完成你的大部分工作。要创建一个新
数据库超级用户,使用CREATE ROLE name SUPERUSER。
database creation
一个角色必须被显式给予权限才能创建数据库,要创建这样一个角色,使用CREATE ROLE name CREATEDB。
role creation
一个角色必须被显式给予权限才能创建更多角色,要创建这样一个角色,使用CREATE ROLE name CREATEROLE。
一个带有CREATEROLE权限的角色也可以修改和删除其他角色,还可以授予或回收角色中的成员关系。
initiating replication
一个角色必须被显式给予权限才能发起流复制一个被用于流复制的角色必须还有LOGIN权限。要创建这样一个角色,使用CREATE ROLE name REPLICATION LOGIN。
password
只有当客户端认证方法要求用户在连接数据库时提供一个口令时,一个口令才有意义。password和md5认证方法使用口令。数据库口令与操作系统命令独立。在角色创建
时指定一个口令:CREATE ROLE name PASSWORD ’string’。在创建后可以用ALTER ROLE修改一个角色属性。
提示: 一个好习惯是创建一个具有CREATEDB和CREATEROLE权限的角色,而不是创建一个超级用户,并且然后用这个角色来完成对数据库和角色的例行管理。
这种方法避免了在非必要时作为超级用户操作任务的风险。
一个角色也可以有角色相关的默认值
例如,如果出于某些原因你希望在每次连接时禁用索引扫描(提示:不是好主意)
ALTER ROLE myname SET enable_indexscan TO off;
这将保存设置(但是不会立刻设置它)
要移除一个角色相关的默认设置,使用ALTER ROLE rolename RESETvarname。
3. 角色成员关系
CREATE ROLE name;
GRANT group_role TO role1, ... ;
REVOKE group_role FROM role1, ... ;
不允许把一个角色中的成员关系授予给PUBLIC。
有INHERIT属性的成员角色自动地具有它们所属角色的权限,包括任何组角色继承得到的权限。
CREATE ROLE joe LOGIN INHERIT;
CREATE ROLE admin NOINHERIT;
CREATE ROLE wheel NOINHERIT;
GRANT admin TO joe;
GRANT wheel TO admin;
在作为角色joe连接后,一个数据库会话将立即拥有直接授予给joe的权限,外加任何授予给admin的权限,因为joe“继承了” admin的权限。
然而,授予给wheel的权限不可用,因为即使joe是wheel的一个间接成员,但是该成员关系是通过带NOINHERIT属性的admin得到的。在:
SET ROLE admin;
之后,该会话将只拥有授予给admin的权限,但是没有授予给joe的权限。在执行:
SET ROLE wheel;
之后,该会话将只拥有授予给wheel的权限,但是没有授予给joe或admin的权限。初始的权限状态可以使用下面命令之一恢复:
SET ROLE joe;
SET ROLE NONE;
RESET ROLE;
注意: SET ROLE命令总是允许选择原始登录角色的直接或间接组角色。因此,在上面的例子中,在成为wheel之前不必先成为admin。
角色属性LOGIN、SUPERUSER、CREATEDB和CREATEROLE可以被认为是一种特殊权限,但是它们从来不会像数据库对象上的普通权限那样被继承。
要使用这些属性,你必须实际SET ROLE到一个有这些属性之一的特定角色。
4. 删除角色
由于角色可以拥有数据库对象并且能持有访问其他对象的特权, 删除一个角色常常并非一次DROP ROLE就能解决。
任何被该角色所拥有的对象必须首先被删除或者转移给其他拥有者, 并且任何已被授予给该角色的权限必须被收回。
对象的拥有关系可以使用ALTER命令一次转移出去,例如:
ALTER TABLE bobs_table OWNER TO alice;
总之,移除曾经拥有过对象的角色的方法是
REASSIGN OWNED BY doomed_role TO successor_role;//REASSIGN OWNED 命令可以被用来把要被删除的角色所拥有的所有对象的拥有关系转移给另一个角色。
DROP OWNED BY doomed_role;
DROP ROLE doomed_role;
5. 函数和触发器安全性
函数和触发器允许用户在后端服务器中插入代码,其他用户不会注意到这些代码的执行。
PostgreSQL 数据库角色的更多相关文章
-
对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...
-
Oracle数据库迁移至PostgreSQL数据库问题及解决
Oracle数据库迁移PostgreSQL数据库问题及解决 目录 如何计划迁移数据库(现状及问题分析) 统计系统表及表功能 解耦公共表 建立数据库 迁移表结构 导入表数据 改SQL语法 保证数据时效性 ...
-
ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
-
PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库
最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQ ...
-
TPC-H生成.tbl文件导入postgresql数据库的坑
数据库project好好的不用主流的MySQL和Microsoft server而要求用听都没听过的postgresql (当然,可能你三个都没听过) 这里的坑主要是把生成的那八张.tbl的表导入pg ...
-
PowerDesigner反向工程PostgreSQL数据库
1. 环境准备: a) 安装PowerDesigner,以PowerDesigner15.1为例 b) 安装java jdk,以jdk-7-windows-i586为例 ...
-
视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...
-
Enterprise Architect的共享Respository设置,postgresql数据库
Enterprise Architect有一个很实用的共享,在设计UML图的时候,可以连接到一个数据库服务器,将所有的画图数据共享在上面,所有连到这个server的人,都可以看到 别人的图,图中的元素 ...
-
SqlServer服务器和数据库角色
首先我们来阐述服务器(实例级别)的权限,实例级别和数据库级别权限的最大不同在于:实例级别的权限是直接授权给登录名,而数据库级别的全显示授予数据库用户的,然后数据库用户再与登录名匹配.(再SqlServ ...
随机推荐
-
openstack数据库获取一个虚机的floating_ip, fix_ip, project_name, user_name, hostname, host
转载请注明 http://www.cnblogs.com/juandx/p/5418204.html openstack有3个库,nova,neutron,keystone,我现在需要做的是跨库联表 ...
-
更改Windows控制台默认缓冲区行数和宽度
Windows控制台窗口默认的显示行数很少, 以至于有时候要显示很多东西的时候, 总是导致前面的内容丢失. 很不爽. 于是GG了下, 在*上找到了答案~~~ 设置方式: 1. ...
-
NoSQL分类及ehcache memcache redis 三大缓存的对比
NoSQL分类 由于NoSQL中没有像传统数据库那样定义数据的组织方式为关系型的,所以只要内部的数据组织采用了非关系型的方式,就可以称之为NoSQL数据库.目前,可以将众多的NoSQL数据库按照内部的 ...
-
用C/C++开发基于VLC SDK的视频播放器
在windows系统如果开发万能播放器,一般都是基本DirectShow来开发,开发也很简单,但缺点也很多,一个文件格式是否能够播放完全取决于你 是否安装了正确的解析器和解码器,即使现在有了万能解器安 ...
-
java transient简介
我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable ...
-
eclipse 配置Maven问题解决办法:新建maven工程时报错:Could not resolve archetype org.apache.maven.archetypes .
此文乃本作者配置maven,被其折磨n天,究极解决方案,好文要顶啊.欢迎致电: zhe-jiang.he@hp.com 首先各maven.archetypes下载地址: http://mirrors. ...
-
webservice拦截器 查看消息包(soap)
服务端: 1.获取EndpointImpl对象 2.调用EndpointImpl对象中的方法获取In拦截器 3.调用EndpointImpl对象中的方法获取out拦截器 4.添加自己的In拦截器与Ou ...
-
Delphi 10.1 Berlin 与 Delphi 10 Seattle 共存
以下安装环境是win7 64位 1. 安装Delphi10.1 Berlin 版本. 2.修改C:\Program Files (x86)\Embarcadero\Studio\18.0\cglm.i ...
-
状压dp Codeforces Beta Round #8 C
http://codeforces.com/contest/8/problem/C 题目大意:给你一个坐标系,给你一个人的目前的坐标(该坐标也是垃圾桶的坐标),再给你n个垃圾的坐标,这个人要捡完所有的 ...
-
Django REST framework 第五章 Relationships &; Hyperlinked APIs
到目前为止,API内部的关系是使用主键来代表的.在这篇教程中,我们将提高API的凝聚力和可发现性,通过在相互关系上使用超链接. Creating an endpoint for the root of ...