host|hostssl|hostnossl <database> <role> <CIDR-address>|<IP-address>,<IP-mask> <authentication-method>本地UNIX域套接字的访问记录具有下面的格式:
local <database> <role> <authentication-method>表1描述了每个字段的含义。
字段 | 描述 |
local | 匹配使用UNIX域套接字的连接请求。如果没有此种类型的记录,则不允许UNIX域套接字连接。 |
host | 匹配使用TCP/IP的连接请求。除非在服务器启动时使用了适当的listen_addresses服务器配置参数(缺省值为“*”,允许所有IP连接),否则不能远程TCP/IP连接。 |
hostssl | 匹配使用TCP/IP的连接请求,但是仅当连接使用SSL加密时。服务器启动时必须通过设置ssl配置参数启用SSL。 |
hostnossl | 匹配不使用SSL的TCP/IP的连接请求。 |
<database> | 指定匹配此行记录的数据库名。值“all”指示匹配所有数据库。多个数据库名用逗号分隔。可以指定一个包含数据库名的文件,在文件名前加“@”。 |
<role> | 指定匹配此行记录的数据库角色名。值“all”指示匹配所有角色。如果指定的角色是一个组并且希望包含所有的组成员,在角色名前面加一个“+”。多个角色名可以通过逗号分隔。可以指定一个包含角色名的文件,在文件名前加“@”。 |
<CIDR-address> | 指定此行记录匹配的客户端主机的IP地址范围。它包含一个以标准点分十进制记法表示的IP地址,和一个CIDR掩码长度。IP地址只能用数字表示,不能是域或主机名。掩码长度标识客户端IP地址必须匹配的高位数。在IP地址、斜杠和CIDR掩码长度之间不能有空格。CIDR地址典型的例子有,单一主机如192.0.2.2/32,小型网络如192.0.2.0/24,大型网络如192.0.0.0/16。指定单一主机时,IPv4的CIDR掩码是32,Ipv6的是128。网络地址不要省略尾部的零。 |
<IP-address>, <IP-mask> | 这个字段是CIDR-address表示法的另一个替代表示方法。用不同列表示的掩码替换掩码长度。例如,255.255.255.255对应的CIDR掩码长度是32。此字段应用于host、hostssl和hostnossl记录。 |
<authentication-method> | 指定连接认证时使用的方法。HAWQ支持PostgreSQL 9.0所支持的认证方法(Trust、Password、GSSAPI、SSPI、Kerberos、Ident-based、LDAP、RADIUS、Certificate、PAM)。 |
<property> <name>max_connections</name> <value>500</value> </property> <property> <name>max_prepared_transactions</name> <value>1000</value> </property> <property> <name>seg_max_connections</name> <value>3000</value> </property>增加这些值会引起HAWQ需要更多的共享内存。为了缓解内存使用压力,可以考虑降低其它内存相关的服务器配置参数,如gp_cached_segworkers_threshold等。
source /usr/local/hawq/greenplum_path.sh
$ hawq config -c max_connections -v 100 $ hawq config -c seg_max_connections -v 640 $ hawq config -c max_prepared_transactions -v 200
$ hawq restart cluster
$ hawq config -s max_connections $ hawq config -s seg_max_connections
create role jsmith with login;一个数据库角色有很多属性,用以定义该角色可以在数据库中执行的任务类型,或者具有的系统权限。表2描述了有效的角色属性。
属性 | 描述 |
SUPERUSER | NOSUPERUSER | 确定一个角色是否是超级用户。只有超级用户才能创建新的超级用户。缺省值为NOSUPERUSER。 |
CREATEDB | NOCREATEDB | 确定角色是否被允许创建数据库。缺省值为NOCREATEDB。 |
CREATEROLE | NOCREATEROLE | 确定角色是否被允许创建和管理其它角色。缺省值为NOCREATEROLE。 |
INHERIT | NOINHERIT | 确定角色是否从其所在的组继承权限。具有INHERIT属性的角色可以自动使用所属组已经被授予的数据库权限,无论角色是组的直接成员还是间接成员。缺省值为INHERIT。 |
LOGIN | NOLOGIN | 确定角色是否可以登录。具有LOGIN属性的角色可以将角色作为用户登录。没有此属性的角色被用于管理数据库权限(即用户组)。缺省值为NOLOGIN。 |
CONNECTION LIMIT connlimit | 如果角色能够登录,此属性指定角色可以建立多少个并发连接。缺省值为-1,表示没有限制。 |
PASSWORD ’password’ | 设置角色的口令。如果不准备使用口令认证,可以忽略此选项。如果没有指定口令,口令将被设置为null,此时该用户的口令认证总是失败。一个null口令也可以显示的写成PASSWORD NULL。 |
ENCRYPTED | UNENCRYPTED | 控制口令是否加密存储在系统目录中。行为由password_encryption配置参数所决定,缺省的设置是md5,如果要改为SHA-256加密,设置此参数为password。如果给出的口令字符串已经是加密格式,那么它被原样存储,而不管指定ENCRYPTED还是UNENCRYPTED(因为系统不能对加密的口令字符串进行解密)。这种设计允许在dump/restore时重新导入加密的口令。 |
VALID UNTIL ’timestamp’ | 设置一个日期和时间,在该时间点后角色的口令失效。如果忽略此选项,口令将永久有效。 |
RESOURCE QUEUE queue_name | 赋予角色一个命名的资源队列用于负载管理。角色发出的任何语句都受到该资源队列的限制。注意,这个RESOURCE QUEUE属性不会被继承,必须在每个用户级(登录)角色设置。 |
DENY {deny_interval | deny_point} | 在此时间区间内禁止访问。指定天或者天和时间。 |
alter role jsmith with password ‘passwd123‘; alter role admin valid until ‘infinity‘; alter role jsmith login; alter role jsmith resource queue adhoc; alter role jsmith deny day ‘sunday‘;
create role admin createrole createdb;一旦组角色存在,就可以使用grant和revoke命令添加或删除组成员(用户角色)。例如:
grant admin to john, sally; revoke admin from bob;为了简化对象权限的管理,应当只为组级别的角色授予适当的权限。成员用户角色继承组角色的对象权限。例如:
grant all on table mytable to admin; grant all on schema myschema to admin; grant all on database mydb to admin;角色属性LOGIN、SUPERUSER、CREATEDB和CREATEROLE不会当做普通的数据库对象权限被继承。为了让用户成员使用这些属性,必须执行SET ROLE指定一个具有这些属性的角色。在上面的例子中,我们已经为admin指定了CREATEDB和CREATEROLE属性。sally是admin的成员,当以sally连接到数据库后,执行以下命令,使sally可以拥有父角色的CREATEDB和CREATEROLE属性。
set role admin;有关角色属性信息可以在系统表pg_authid中找到,pg_roles是基于系统表pg_authid的视图。系统表pa_auth_members存储了角色之间的成员关系。
对象类型 | 权限 |
Tables、Views、Sequences | SELECT、INSERT、RULE、ALL |
External Tables | SELECT、RULE、ALL |
Databases | CONNECT、CREATE、TEMPORARY | TEMP、ALL |
Functions | EXECUTE |
Procedural Languages | USAGE |
Schemas | CREATE、USAGE、ALL |
Custom Protocol | SELECT、INSERT、RULE、ALL |
grant insert on mytable to jsmith;使用revoke命令回收权限。例如:
revoke all privileges on mytable from jsmith;也可以使用drop owned和reassign owned命令为一个角色删除或重新赋予对象属主权限。只有对象的属主或超级用户可以删除或重新赋予对象的属主权限。例如:
reassign owned by sally to bob; drop owned by visitor;HAWQ不支持行级和列级的访问控制,但是可以使用视图限制查询的行或列,模拟行级和列级访问控制。此时角色被授予对视图而不是基表的访问权限。
$ source /usr/local/hawq/greenplum_path.sh
$ hawq config -c password_hash_algorithm -v ‘SHA-256‘
$ hawq stop cluster -u
$ hawq config -s password_hash_algorithm
set password_hash_algorithm = ‘SHA-256‘;
show password_hash_algorithm;
create role testdb with password ‘testdb12345#‘ login;修改客户端认证方法,允许存储SHA-256加密的口令,打开master的pg_hba.conf文件并添加下面一行:
host all testdb 0.0.0.0/0 password重启集群:
hawq restart cluster以刚创建的testdb用户登录数据库。
psql -d postgres -h hdp3 -U testdb在提示时输入正确的口令。
select rolpassword from pg_authid where rolname = ‘testdb‘;
连接参数 | 描述 | 环境变量 |
应用名 | 连接数据库的应用名称。连接参数application_name中配置的缺省值是psql。 | $PGAPPNAME |
数据库名 | 连接的数据库名称。对于一个新初始化的系统,首次连接使用template1数据库。 | $PGDATABASE |
主机名 | HAWQ master的主机名。缺省主机时localhost。 | $PGHOST |
端口 | HAWQ master实例运行的端口号。缺省是5432。 | $PGPORT |
用户名 | 连接数据库的用户(角色)名称。与操作系统用户名相同的用户名不需要此参数。注意,每个HAWQ系统都有一个在初始化时自动创建的超级用户账号。这个账号与初始化HAWQ系统的操作系统用户同名(典型地是gpadmin)。 | $PGUSER |
psql -d mytest -h hdp3 -p 5432 -U `gpadmin` psql mytest psql如果一个用户定义的数据库还没有创建,可以通过连接template1数据库访问系统。例如:
psql template1连接数据库后,psql提供一个由当前连接的数据库名后跟=>构成的提示符(超级用户是=#)。例如:
mytest=>在提示符下,可以键入SQL命令。一个SQL命令必须以;(分号)结束,以发送到诉服务器执行。例如:
select * from mytable;psql常用命令与mysql命令行的比较如表5所示。
功能描述 | psql | mysql |
联机帮助 | help:简要帮助 \?:psql命令帮助 \h:SQL命令帮助 | help、?、\?、\h:都是等价的简要帮助。后面可以跟SQL命令,显示详细的命令语法 |
执行SQL | 分号或\g | 分号、\g或\G |
退出 | \q | \q、exit或quit |
列出所有数据库 | \l | show databases; |
改变当前连接的数据库 | \c DBNAME | use db_name; |
列出内部表 | \dt | show tables; |
列出外部表 | \dx | 无 |
表的描述 | \d NAME | desc tbl_name; |
列出索引 | 目前不支持索引 | show index from tbl_name; |
列出视图 | \dv | show tables; |
列出序列 | \ds | 无 |
列出系统表 | \dtS+ | show tables from mysql; show tables from information_schema; show tables from performance_schema; |
问题 | 解决方案 |
No pg_hba.conf entry for host or user | 为了让HAWQ接受远程客户端连接,必须配置HAWQ的master实例上配置位于master实例数据目录下的pg_hba.conf文件,在该文件中增加适当的条目,允许客户端主机和数据库用户连接到HAWQ。 |
HAWQ is not running | 如果HAWQ master实例宕机,用户将不能连接。可以在HAWQ master上运行hawq state应用程序,验证HAWQ系统正在运行。 |
Network problem Interconnect timeouts | 当用户从远程客户端连接到HAWQ master时,网络问题可能阻止连接,例如,DNS主机名解析问题,主机系统断网等等。为了确认不是网络问题,从远程客户端所在主机连接HAWQ master所在主机。例如:ping hostname。 如果系统不能解析HAWQ主机IP地址所涉及的主机名,查询和连接将失败。有些操作使用localhost进行连接,而另一些操作使用实际的主机名,所以两种情况都必须能正确解析。如果碰到连接错误,首先核实能够从HAWQ master所在主机连接到集群主机。在master和所有段的/etc/hosts文件中,确认有HAWQ集群中所有主机的正确的主机名和IP地址。127.0.0.1必须被解析成localhost。 |
Too many clients already | 缺省时,HAWQ master和segment允许的最大并发连接数分别是200和1280。超出此限制的连接将被拒绝。这个限制由master实例的max_connections参数和segment实例的seg_max_connections参数所控制。如果修改了master的设置,也必须在segment节点上做适当的修改。 |
Query failure | HAWQ集群网络中必须配置DNS反向解析。如果DNS反向解析没有配置,失败的查询将在HAWQ master的日志文件中产生“Failed to reverse DNS lookup for ip <ip-address>”警告消息。 |
原文:http://blog.csdn.net/wzy0623/article/details/60141550