说明
根据公司开发环境统一管理的规定,数据库由DBA统一创建与管理。本篇文章适合于DBA阅读,方便统一管理。
本文会使用一些参数变量,参数变量会使用斜体。同一名称的参数变量前后文值相同。
参数变量及意义说明:
- username:用户名,创建用户时设置。
- password:用户密码,用户创建时设置。
- tbsname:表空间名,创建表空间是设置。
- tbsdir:表空间路径,创建表空间时设置。其值为Linux操作系统上PostgreSQL数据库所属用户有权限的已经创建好的路径。比如,“/data1/pgdata/tbs”,“tbs”必须要满足两点:1、已经创建;2、PostgreSQL的所属用户有rwx权限。
- dbname:数据库名,创建数据库时设置。
本文采用的是,一个用户名对应一个数据库,不考虑其他情况。所有用户名的字母均为小写字母,所有数据库名中的字母均为大写字母。
创建用户
使用postgres用户连接数据库,因为postgres用户为数据库最高权限用户,不会出现权限不足的问题。连接方法,略。具体请查看《用户连接》文章。
- 创建用户
使用命令:
“create user username with password 'passwd';”
或者
“create role username with password 'passwd' login;”。
- 使用role和user的差别是user有login权限,role没有。
- with后面跟参数。
- password为密码参数,用以指定密码。
- login为登录权限。
- 创建表空间
使用命令:
“create tablespace tbsname owner username location 'tbsdir';”
- tbsname:为表空间名。所要创建的表空间。
- owner:指定表空间属于哪个用户。不加owner,默认谁创建属于谁。
- username:为用户名。所指定的表空间的属主用户。
- tbsdir:为表空间路径,这是操作系统上的路径,必须要先在操作系统上先创建。
- 创建数据库:
使用命令:
“create database tbsname owner username tablespace tbsname;”
tbsname:数据库名。所要创建的数据库。
owner:指定表空间属于哪个用户。不加owner,默认谁创建属于谁。
username:用户名,所指定的数据库的属主用户。
tbsname:表空间名,用于指定数据库属于哪个表空间。方便管理。
权限管理
PostgreSQL中,每个数据库的权限都是独立的。权限管理部分的操作,都需要切换到相应的数据。比如要对test数据库进行权限管理,那么下列命令必须都在test数据库下执行,否则不会在test数据库中生效。
- 收回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”为用户,必须要大写。
- 赋予用户权限
收回了“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用户均不再能连接这个数据库。