pg/gp权限管理

说明

根据公司开发环境统一管理的规定,数据库由DBA统一创建与管理。本篇文章适合于DBA阅读,方便统一管理。

本文会使用一些参数变量,参数变量会使用斜体。同一名称的参数变量前后文值相同。

参数变量及意义说明:

  • username:用户名,创建用户时设置。
  • password:用户密码,用户创建时设置。
  • tbsname:表空间名,创建表空间是设置。
  • tbsdir:表空间路径,创建表空间时设置。其值为Linux操作系统上PostgreSQL数据库所属用户有权限的已经创建好的路径。比如,“/data1/pgdata/tbs”,“tbs”必须要满足两点:1、已经创建;2、PostgreSQL的所属用户有rwx权限。
  • dbname:数据库名,创建数据库时设置。

本文采用的是,一个用户名对应一个数据库,不考虑其他情况。所有用户名的字母均为小写字母,所有数据库名中的字母均为大写字母。

创建用户

使用postgres用户连接数据库,因为postgres用户为数据库最高权限用户,不会出现权限不足的问题。连接方法,略。具体请查看《用户连接》文章。

  1. 创建用户

使用命令:

“create user username with password 'passwd';”

或者

“create role username with password  'passwd'  login;”。

  • 使用role和user的差别是user有login权限,role没有。
  • with后面跟参数。
  • password为密码参数,用以指定密码。
  • login为登录权限。
  1. 创建表空间

使用命令:

“create tablespace tbsname owner username location 'tbsdir';”

  • tbsname:为表空间名。所要创建的表空间。
  • owner:指定表空间属于哪个用户。不加owner,默认谁创建属于谁。
  • username:为用户名。所指定的表空间的属主用户。
  • tbsdir:为表空间路径,这是操作系统上的路径,必须要先在操作系统上先创建。
  1. 创建数据库:

使用命令:

“create database tbsname owner username tablespace tbsname;”

tbsname:数据库名。所要创建的数据库。

owner:指定表空间属于哪个用户。不加owner,默认谁创建属于谁。

username:用户名,所指定的数据库的属主用户。

tbsname:表空间名,用于指定数据库属于哪个表空间。方便管理。

权限管理

PostgreSQL中,每个数据库的权限都是独立的。权限管理部分的操作,都需要切换到相应的数据。比如要对test数据库进行权限管理,那么下列命令必须都在test数据库下执行,否则不会在test数据库中生效。

  1. 收回PUBLIC的权限

“PUBLIC”在PostgreSQL中指代所有用户。“PUBLIC”在所有数据库中,都在三个schema下拥有权限,分别是:pg_catalog、information_schema和public。因此,这三个schema对于“PUBLIC”的权限应该要收回。

使用命令:

“revoke all on schema public from PUBLIC;”

“revoke all on schema information_schema from PUBLIC;”

“revoke all on schema pg_catalog from PUBLIC;”

特别注意:这三条命令中,最后的“PUBLIC”为用户,必须要大写。

  1. 赋予用户权限

收回了“PUBLIC”权限之后,数据库属主用户的权限也一同被收回了。属主用户对于数据库就出现了权限缺失。因此,我们要把某些权限单独赋予属主用户。

使用命令:

“grant all on schema information_schema to username;”

“grant usage on schema information_schema to username;”

“grant usage on schema pg_catalog to username;”

  • username:数据库的属主用户,除了此用户,其他非postgres用户均不再能连接这个数据库。
上一篇:第三章 Goroutine调度策略(16)


下一篇:遗传编程/基因规划(Genetic Programming) 初学者笔记01:基本概念与过程