Postgresql用户组、用户
在postgre8.0版本之后,用户user和用户组group的生成被create role语句同意起来了,但是为了兼容,也保留了create user和create group语句。
当initdb后,postgre默认生成了一个超级role用户:postgres,在操作数据库之前应该用postgres登录数据库,为数据库建立一些用户和用户组。
用户(user role)
create role fu login password '111' createdb;
以上语句生成了一个名为fu的用户,可以用这个用户名登录,登录密码为111,这个用户可以自行建立database。
用户名默认一直有效,但也可以为用户名指定有效期:
#默认设置
create role fu login password '111' createdb valid until 'infinity';
#指定有效期
create role fu login password '111' createdb valid until '2050-05-05 05:05';
用户组(group role)
用户组通常是那些没有login权限,但是有其他role作为成员的role。当然,这只是一个约定,不是强制的,你也可以创建一个既能登录也包含其他role成员的用户组,但是通常不会这么做。
#生成一个group role
create role fugroup inherit;
#添加其他用户或组
grant fugroup to fu;
#修改命令。官方要求修改max_connections的同时,同步修改max_prepared_transactions。
[gpadmin@mdw ~]$ gpconfig -c max_connections -v 1500 -m 500
[gpadmin@mdw ~]$ gpconfig -c max_prepared_transactions -v 500
#修改完参数后重启数据库生效
[gpadmin@mdw ~]$ gpstop -u
#查看max_connections
[gpadmin@mdw ~]$ gpconfig -s max_connections
Values on all segments are consistent
GUC : max_connections
Master value: 250
Segment value: 750
#查看max_prepared_transactions
[gpadmin@mdw ~]$ gpconfig -s max_prepared_transactions
Values on all segments are consistent
GUC : max_prepared_transactions
Master value: 250
Segment value: 250
#创建用户app_wsa_etl
gpdw=# create user app_wsa_etl;
正文
1. role
CREATE ROLE test_role WITH LOGIN PASSWORD 'test_role`;
2. filespace
2.1 tablespace
CREATE TABLESPACE test_tablespace OWNER test_role LOCATION '/opt/greenplum';
3. database
在Greenplum中:
1)无法使用未授权的用户创建数据库。(无所谓在哪个role下创建database,database对每一个role都可见???)
#问题:未给test_role授权CREATEDB,因此在test_role下创建test_database被拒绝。
[gpadmin@mdw gpseg-1]$ psql -h mdw -p 5432 -d gpdw -Utest_role
Password for user test_role:
psql (9.4.24)
Type "help" for help.
gpdw=> \c
You are now connected to database "gpdw" as user "test_role".
gpdw=> CREATE DATABASE test_database;
ERROR: permission denied to create database
#解决办法:用具备CREATEDB权限的ROLE去CREATE DATABASE即可。
#1.在gpadmin下CREATE DATABASE(gpadmin默认有CREATEDB权限)
[gpadmin@mdw gpseg-1]$ psql
psql (9.4.24)
Type "help" for help.
gpdw=# \c
You are now connected to database "gpdw" as user "gpadmin".
gpdw=# CREATE DATABASE test_database;
CREATE DATABASE
#2.在gpadmin下给普通用户赋权CREATEDB,在普通用户下CREATE DATABASE
[gpadmin@mdw gpseg-1]$ psql
psql (9.4.24)
Type "help" for help.
gpdw=# \c
You are now connected to database "gpdw" as user "gpadmin".
gpdw=# ALTER ROLE test_role CREATEDB;
ALTER ROLE
[gpadmin@mdw gpseg-1]$ psql -h mdw -p 5432 -d gpdw -Utest_role
Password for user test_role:
psql (9.4.24)
Type "help" for help.
gpdw=> \c
You are now connected to database "gpdw" as user "test_role".
gpdw=> CREATE DATABASE test_database;
CREATE DATABASE
#查看数据库
gpdw=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+-----------+----------+------------+------------+---------------------
gpdw | gpadmin | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | gpadmin | UTF8 | en_US.utf8 | en_US.utf8 |
test_database | test_role | UTF8 | en_US.utf8 | en_US.utf8 |
(3 rows)
#登录数据库
[gpadmin@mdw gpseg-1]$ psql -h mdw -p 5432 -d test_database -Utest_role;
Password for user test_role:
psql (9.4.24)
Type "help" for help.
test_database=> \c
You are now connected to database "test_database" as user "test_role".
#删除数据库
#在DROP DATABASE之前需要确保没有sessions 在using the database.
(还未测试)DROP DATABASE test_database;
3.1 schema
在Greenplum中:
1)一个database下可以有多个schema,一个schema只属于一个database;
2)不同的database之间schema没有关系,可以重名。
# 创建schema之前需要登录指定的数据库,创建的schema隶属该数据库。
[gpadmin@mdw gpseg-1]$ psql -h mdw -p 5432 -d test_database
psql (9.4.24)
Type "help" for help.
test_database=> CREATE SCHEMA test_schema;
CREATE SCHEMA
# 查看当前database下的schema
# 命令一:SELECT nspname FROM pg_namespace;
# 命令二:\dnS或者\dns
test_database=> SELECT nspname FROM pg_namespace;
test_database=> \dnS
test_database=> \dns
#删除schema只能在schema隶属的数据库下删除
test_database=> DROP SCHEMA test_schema;
DROP SCHEMA