GREENPLUM与ORACLE一样有着完全独立于操作系统的用户管理
系统,以及权限管理系统。首先我们介绍一下GP中的数据库
。
在GP初始化系统后,GP会自动创建出三个数据库postgre,template0,template1.
其中postgre用作系统内部数据的存放,我们既不要删除它,也不要修改它。template1是系统默认的数据,我们创建数据库时可以以
template1为模板,创建新的数据库。所以,如果有不希望其它数据库继承的对象,就不要在数据库template1中进行创建。GP中创建数据库的
语法非常简单,句法如下
CREATE DATABASE newname USING TEMPLATE tmplatedbname;
速
度非常快,这个过程中系统会生成相应的字典信息。如果没有指定using
template子句,系统就使用template1数据库作为模板创建新数据库。我们也可以其它数据库为模板,创建新的数据库。template0数据
库是创建template1的模板,一般我们也不使用它创建应用对象。GP允许在一个GP
SERVER中创建多个DATABASE。但是一个DATABASE只能属于一个SERVER。一个连接在同一时间点只能访问一个数据库。
GP中也有SCHEMA的概念。SCHEMA本质就是一个数据库中有关联关系的对象集合,或者也可以理解成对象的命名空间。GP允许在一个数据库中创建多
个SCHEMA,但是一个SCHEMA只能属于一个数据库。在创建数据库时,系统自动创建一个称为PUBLIC的SCHEMA。如果自己需要创建
SCHEMA,其句法如下
CREATE SCHEMA schema_name;
一个SCHEMA中,不允许出现同名对象。但是不同的SCHEMA是允许对象同名的。所以很多SQL
访
问对象时可以在对象名前加SCHEMA作为前缀,说明对象出处。如果不加SCHEMA做前缀,访问对象,会话按指定的SCHEMA顺序搜索对象,默认的搜
索路径只有public,新建的schema不会加到。这也是现在用户在使用工具时常见的一类问题。由于默认SCHEMA搜索路径设置不正确,导致应用无
法访问到需要的对象。就像下面的过程
xjods=# create schema xjods;
CREATE SCHEMA
xjods=# create table xjods.t1(id numeric);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'id' as the Greenplum Database data
distribution key for this table.
HINT:
The 'DISTRIBUTED BY' clause determines the distribution of data. Make
sure column(s) chosen are the optimal data distribution key to minimize
skew.
CREATE TABLE
xjods=#
xjods=# select * from t1;
ERROR: relation "t1" does not exist
LINE 1: select * from t1;
SCHEMA搜索路径的设置可以在会话中指定,可以在数据库层面指定,可以在用户层面指定,还可以在服务参数中指定。
在会话中指定,只对当前连接有效。
=> set search_path to 'myschema,public';
在数据库中指定,对特定数据库有效
=> alter database <dbname> set search_path to myschema,public
在用户层面设定,对的定用户的连接有效,比如
ALTER ROLE sally SET search_path TO myschema, public, pg_catalog;
想查看当前的schema,可以用如下命令
=> SELECT current_schema();
或者
=> SHOW search_path;
如果设置存在冲突,优先级是 会话设置 优先于 用户设置 优先于 数据库设置 优先于服务参数设置。
一般而且言,我们可以理解数据库对应着应用,SCHEMA则对应着每个应用的模块。在具体数据库设置时,可以根据需求进行灵活设置。比如要简化备份
,减少系统负载的话,就应该尽量减少数据库的创建。因为这样可以减少备份的数量,以及字典的信息。
下面再来看GP中的用户。数据库的用户从本质上讲就是用于身份审核和权限管理的机制。与ORACLE一样GP也有完全独立于操作系统的用户管理模块。也就
是GP的用户和操作系统用户没有多大关系。在创建数据库时,系统会创建一个称为gpadmin的超级管理员(建议用来安装GP操作系统用户也是
gpadmin),默认该账号从服务器
登录时,可以走操作系统认证,不需要用户名密码。它可以完成所有操作。GP中创建用户的句法如下
CREATE ROLE name [[WITH] option [ ... ]]
它的选项,指定了用户的身份认证,系统权限,以及资源限制等等 。具体选项如下
SUPERUSER | NOSUPERUSER
指定了用户是否是超级管理员,默认是NOSUPERUSER。 如果是超级管理员则没有访问限制。一般应用用户不要赋予这项权限。
CREATEDB | NOCREATEDB
指定了用户是否可以创建数据库。默认是NOCREATEDB
CREATEROLE | NOCREATEROLE
指定了用户是否可以创建新的用户,默认是NOCREATEROLE
CREATEEXTTABLE | NOCREATEEXTTABLE[ ( attribute='value'[, ...] ) ]
指定用户是否可以创建特定类型,特定协议的外部表。
可以指定的属性包括
type='readable'|'writable'
protocol='gpfdist'|'http'|'gphdfs'
如果使用file协议,或者execute协议的外部表,必须是超级管理员。
默认是 NOCREATEEXTTABLE
INHERIT | NOINHERIT
在GP中,没有独立的角色概念,用户既是角色,也是用户。因此当一个
LOGIN | NOLOGIN
设定用户是否有登录系统的权限。默认是NOLOGIN。一般用来管理权限的角色分配NOLOGIN权限。
CONNECTION LIMIT connlimit
限制并发连接的数量,默认值是-1,表示没有限制。在GP中有其它更合适的方式限制并发连接的数量,因此建议不要修改该设置。
[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
设置用户的口令,并指定在字典中存放口令是否要进行加密。
VALID UNTIL 'timestamp'
指定口令的生命周期。默认是永远不过期。
IN ROLE rolename [, ...]
向角色中添加新的成员角色,这样新建用户就成了一个组的概念。可以使用grant命令实现同样的效果
ADMIN rolename [, ...]
向角色中添加新角色时,使用with admin option选项。允许角色把其它角色的权限再授予其它角色。
RESOURCE QUEUE queue_name
为用户建立资源队列后,控制用户连接的资源消耗。一个用户只能分配一个资源队列。=# CREATE ROLE admin CREATEROLE CREATEDB;
GP没有独立的用户组或者角色概念。我们可以把一个用户赋予另外一个用户,从而实现角色概念,简化权限的管理。比如
=# CREATE ROLE admin CREATEROLE CREATEDB;
=# GRANT admin TO john, sally;
=# REVOKE admin FROM bob;
那么admin就是组角色,john,sally就是成员角色,成员角色从组角色继承系统权限
同样,对象的所有者拥有对象的所有权限,如果把对象权限赋予组角色,那么组角色的成员角色也会获取相关对象的访问权限。比如
=# GRANT ALL ON TABLE mytable TO admin;
=# GRANT ALL ON SCHEMA myschema TO admin;
=# GRANT ALL ON DATABASE mydb TO admin;
那么,admin的成员角色也会得到相应的对象访问权限。
GP支持的对象权限包括
Object Type Privileges
Tables, Views, Sequences SELECT
INSERT
UPDATE
DELETE
RULE
ALL
External Tables SELECT
RULE
ALL
Databases CONNECT
CREATE
TEMPORARY | TEMP
ALL
Functions EXECUTE
Procedural Languages USAGE
Schemas CREATE
USAGE
ALL
由
于GP没有提供SELECT/UPDATE/DELET ANY
TABLE这样的系统权限,所以需要通过组角色进行模拟,因此会显得比ORACLE这样的数据库麻烦。另外,GP对行列访问控制的粒度只是到
Orange Book
‘C2’的安全级别,而不是B1级别。也就是访问控制只支持到对象级别,无法支持到行级和列级,但是可以通过视图的方法就行模拟控制。
分享到:
相关推荐
1.1 概述2 1.2 赋予权限的步骤总结3 1.3 管理赋予在用户特殊属性上的权限 3 1.4 用户对数据库对象操作权限列表 3 1.5 用户角色列表4 2.
基于Greenplum Hadoop- 分布式平台的大数据解决方案18.定义数据库对象(8)-创建和装载分区表.zip
有关配置,管理和监控Greenplum数据库安装以及管理,监控和使用数 据库的信息。该指南还包含有关Greenplum数据库架构和概念(例如 并行处理)的信息。 Greenplum数据库概念 这一节给出了Greenplum数据库组件和...
有时候在django中使用postgresql和greenplum数据库时,使用django model的数据库同步命令时会有问题,生成不了对应的数据库表,无奈只有手工先创建数据库表,然后再根据表字段手动创建model,为了提高效率我写了一个...
greenplum数据库4.3版本创建dblink使用contrib包postgresql-8.3.23.tar.gz
/** 创建数据库连接 */ public Connection getCon() { try { con = DriverManager. getConnection(url, user, password); System. out.println("创建数据库连接成功!" ); } catch (SQLException e...
2.1 创建需要备份的数据库3 2.2 执行备份数据库的命令3 2.3 查看备份出来的数据格式3 3.1 创建需要恢复的数据库4 3.2 导入备份数据4 4.1
章节一:介绍Greenplum 章节二:预估存储容量 章节三:系统环境配置 章节四:安装前环境配置 章节五:安装Greenplum 章节六:检查批量安装情况 章节七、创建数据存储区域 章节八:验证你的系统环境 章节十:...
docker安装greenplum集群服务,通过dockerfile创建greenplum镜像,容器启动后,对greenplum集群进行配置
对表空间的选择,通常的数据库都包含系统管理的表空间和数据库管理的表空间两种类型。系统管理表空间由操作系统的文件系统管理器分配和管理空间,管理灵活但是性能很差。数据库管理的空间由数据库管理程序控制存储...
在网络安全,预测性维护,风险管理,欺诈检测和许多其他领域中,为复杂的应用程序快速创建和部署模型。 凭借其独特的基于成本的查询优化器,该优化器专为大规模数据工作负载而设计,Greenplum可将交互式和批处理模式...
为网络安全、预测性维护、风险管理、欺诈检测和许多其他领域的复杂应用程序快速创建和部署模型。 凭借其为大规模数据工作负载设计的独特的基于成本的查询优化器,Greenplum 将交互式和批处理模式分析扩展到 PB 级的...
数据模型:src/main/resources/数据模型.png一、编译程序: mvn assembly:assembly二、在MySQL中创建一个数据库,然后执行 src/main/resources/model_ddl.sql 创建对应的表。三、指定ES的经纬度类型:curl -H "Content...
其背后的想法是允许用户使用任何预定义表中的伪数据集测试数据库查询。 使用模拟数据,用户可以拥有 用任何特定(受支持的)数据类型定义的自己的表。 只需要提供目标表和要插入的随机生成数据的行数即可。 创建一...
这是用于将SQLAlchemy与数据库一起使用的自定义方言。 它扩展了Postgresql的方言。 功能包括: “ CREATE TABLE”语句的Hawq选项 点班 修改后的“ DELETE”语句,与SQLAlchemy的测试套件兼容 除非明确覆盖,否则...
8.6 删减DataNode 8.7 增加DataNode 8.8 管理NameNode 和SNN 8.9 恢复失效的NameNode 8.10 感知网络布局和机架的设计 8.11 多用户作业的调度 8.11.1 多个JobTracker 8.11.2 公平调度器 8.12 小结第三部分 ...
对全库所有表生成创建表的脚本,所有建表脚本均添加if exists脚本,不存在的表进行添加操作,存在的表跳过不进任何操作,经常使用在数据库结构添加时使用。