阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

PostgreSQL数据库对象管理之非模式对象

112次阅读
没有评论

共计 6951 个字符,预计需要花费 18 分钟才能阅读完成。

数据库对象管理之非模式对象

数据库对象:表,索引,视图,图表,缺省值,规则,触发器,语法等。所有在数据库中的一切,都可以被称为数据库对象。

按照一般划分,数据库对象分为模式对象和非模式对象

模式对象:特定数据库对象的集合。如:表、索引等。

非模式对象:其他数据库对象。如用户、权限、表空间等

一非模式对象及相关

1 用户与角色

(1) 用户(user):用户用来访问和管理数据库,具有一系列的权限,如登陆、建表、建索引等。

(2) 角色(role):和用户相同,唯一的区别是默认无法登陆, 通常作为权限角色组。

create role testrole1;// 角色, 不可登陆

create user testuser1; // 用户, 可登陆

select * from pg_roles;

select * from pg_user;

select * from  pg_authid;// 表中 rolcanlogin 决定是否可以登录

修改用户 testuser1 不可登陆

update pg_authid set  rolcanlogin=’f’ where rolname=’testuser1′;

修改用户 testuser1 可登陆

ALTER ROLE testuser1 WITH LOGIN;

(3) 角色组: 便于权限授予控制,可以把各种权限统一授予给某个角色组,再把角色组授予给特定用户。

通过 \h create user 和 \h create role 来对比

查看数据库用户:

\du   或者  select * from pg_user;

            select * from pg_shadow;  // 需要 dba 权限,显示密码

创建用户:\h create user(也可通过外部命令创建)

     create user test001 with password ‘123456’;// 密码加密

     create user test002 with unencrypted password ‘123456’;// 密码不加密

修改用户:\h alter user

          Alter user test001  with password ‘654321’;// 修改密码

删除用户:drop user test001;    – 删除用户之前需要删除所属他的表和 schema

2 权限管理

少部分权限:不会级联回收。只能由 superuser 去回收。

部分权限:用户对其他用户的数据对象操作的权限。会级联回收。

级联授权:A 用户授权 B 用户可以使用 with grant option 参数指定级联权限。

级联回收:A 用户给了 B 用户某个权限,而 B 用户又将该权限赋予 C 用户。当 A 收回给 B 用户权限的时候,会要求 cascade 级联回收。

2.1 创建用户的时候授权

(修改方式 alterrole 名称 with  权限)

superuser/nosuperuser      超级用户权限

createdb/nocreatedb        创建数据库的权限

createrole/nocreaterole    创建角色的权限

createuser/nocreateuser    创建用户的权限

inherit/noinherit          可继承的权限   

login/nologin              可登陆权限

replication/noreplication  流复制专用用户

connection limit           连接限制(默认 -1, 无限制)

2.2 grant 赋权 (revoke 收回)

语法:grant 权限 on 数据库对象的类型(database,table,sequence,schema)to 用户

ALL                所有权限

CREATE    对于数据库时创建模式,对于模式是创建对象,对于表空间是创建对象在表空间

DELETE              删除权限

INSERT              插入权限

SELECT              查找权限

TEMPORARY          创建临时表

TRUNCATE            清空表

USAGE              使用权限

CONNECT            连接权限

EXECUTE            执行权限

REFERENCES          创建外键约束

TRIGGER            指定表示创建触发器

UPDATE              更新

test=# \h  GRANT (\h REVOKE)

GRANT {{ SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER}

    [, …] | ALL [PRIVILEGES] }

    ON {[ TABLE] 表名 [, …]

        | ALL TABLES IN SCHEMA 模式名称 [, …] }

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {{ SELECT | INSERT | UPDATE | REFERENCES} (列名称 [, …] )

    [, …] | ALL [PRIVILEGES] (列名称 [, …] ) }

    ON [TABLE] 表名 [, …]

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {{ USAGE | SELECT | UPDATE}

    [, …] | ALL [PRIVILEGES] }

    ON {SEQUENCE 序列名称 [, …]

        | ALL SEQUENCES IN SCHEMA 模式名称 [, …] }

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {{ CREATE | CONNECT | TEMPORARY | TEMP} [, …] | ALL [PRIVILEGES] }

    ON DATABASE 数据库名称 [, …]

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {USAGE | ALL [ PRIVILEGES] }

    ON DOMAIN 域_名称 [, …]

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {USAGE | ALL [ PRIVILEGES] }

    ON FOREIGN DATA WRAPPER 外部数据封装器的名称 [, …]

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {USAGE | ALL [ PRIVILEGES] }

    ON FOREIGN SERVER 服务器名称 [, …]

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {EXECUTE | ALL [ PRIVILEGES] }

    ON {FUNCTION 函数名称 ( [ [ 参数模式] [参数名称] 参数类型 [, …] ] ) [, …]| ALL FUNCTIONS IN SCHEMA 模式名称 [, …] }

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {USAGE | ALL [ PRIVILEGES] }

    ON LANGUAGE 语言名称 [, …]

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {{ SELECT | UPDATE} [, …] | ALL [PRIVILEGES] }

    ON LARGE OBJECT loid [, …]

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {{ CREATE | USAGE} [, …] | ALL [PRIVILEGES] }

    ON SCHEMA 模式名称 [, …]

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {CREATE | ALL [ PRIVILEGES] }

    ON TABLESPACE 表空间的名称 [, …]

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT {USAGE | ALL [ PRIVILEGES] }

    ON TYPE 类型名称 [, …]

    TO {[ GROUP] 角色名称 | PUBLIC } [, …] [WITH GRANT OPTION]

GRANT 角色名称 [, …] TO 角色名称 [, …] [WITH ADMIN OPTION]

2.3 例对象权限授予与收回

– 示例权限授予与收回

test=# create user test1 with password  ‘123456’;

test=# create user test2 with password  ‘123456’;

test=#CREATE SCHEMA test1 AUTHORIZATION test1;

test=#CREATE SCHEMA test2 AUTHORIZATION test2;

\c test test1  – 切换到 test1 用户

create table t1 (id int);

insert into t1 values(1);

\c test test2

select * from test1.t1; – 报错,无权限

\c test test1

grant select on test1.t1 to test2;  – 将 t1 表的 select 权限赋予 test2

–grant select on all tables in schema test1 to test2;– – 授予批量查表权限

\c test test2

select * from test1.t1; – 报错,无权限

\c test test1

Grant usage on schema test1 to test2;  – 将 shema test1 的 usage 权赋给 test2

\c test test2

select * from test1.t1; – 正确结果

提示:如果 test1 是建立在 public 模式下,则将 test1 赋权之后,可以直接访问。

 – 示例权限级联授予与回收

\c test dba – 切换到 dba 用户

create user test3 with password  ‘123456’;

\c test test2

Grant usage on schema test1 to test3;  – 警告:  没有为 ”test1″ 授予权限

\c test test1

revoke usage on schema test1 from test2;    – 回收 test2 对于 schema test1 的权限

grant usage on schema test1 to test2 with grant option; – 使用 grant 选项赋权

revoke select on test1.t1 from test2;

grant select on test1.t1 to test2 with grant option;

\c test test2

grant select on test1.t1 to test3;

grant usage on schema test1 to test3;  – 赋权成功

\c test  test3

select * from test1.t1;

\c test  test1

revoke usage on schema test1 from test2;– 要求 CASCADE 会级联收回

revoke select on test1.t1 from test2;

ERROR:  dependent privileges exist

HINT:  Use CASCADE to revoke them too.

STATEMENT:  revoke select on test1.t1 from test2;

ERROR:  dependent privileges exist

HINT:  Use CASCADE to revoke them too.

revoke usage on schema test1 from test2 CASCADE;

revoke select on test1.t1 from test2 CASCADE;

– 示例权限组

\c  test dba

test=# grant select on test1.t1 to testx;

test=# grant usage on schema test1 to testx;

test=# grant  testx to test2;

— ALTER GROUP testx ADD USER test3; (ALTER GROUP testx DROP USER test3;)

\c  test test2

select *  from test1.t1;

2.4 例

某些生产环境不允许任何用户在 public 模式下创建对象(即某些用户只能查询的权限)

test=# create user test4 with password ‘123456’;

test=# revoke  create on schema public from public;

REVOKE

test=# \c  test test4

test=> create table tbtest4(id int);

错误:  对模式 public 权限不够

test=> \c  test dba

test=# grant create  on schema public to test4;

test=# \c  test test4

test=> create table tbtest4(id int);

// 给 test4 用户授权查 public 模式下的所有表

upbase=# grant select on all tables in schema public to test4;

// 给 test4 用户授权查 public 模式下以后新建的所有表

upbase=# alter default privileges in schema public grant select on  tables to test4;

如果是其他模式同理

grant select on alltables in schema XX  to username;

alter default privileges in schema XX grant select on tables to username;

3 空间管理

定义空间只是定义一个目录,抽象概念。

3.1 创建表空间

操作系统创建目录:mkdir -p /test/data/tablespace_test

数据库 sql 命令:

不指定表空间所属用户,表空间属于创建该表空间的用户。

create tablespace tablespace_test location  ‘/test/data/tablespace_test’;

指定表空间所属用户

create tablespace tablespace_test owner test1location 

 ‘/test/data/tablespace_test’;

3.2 其他相关命令

(1) 查看表空间:

\db  or  select *from pg_tablespace;

(2) 查看表空间大小:

select pg_size_pretty(pg_tablespace_size(‘pg_default’));

(3) 设置默认的表空间:

SET default_tablespace = tablespace_test;

(4) 将表创建到指定的表空间:

CREATE TABLE test(id  int) TABLESPACE  tablespace_test; 

ok

 

———————————— 华丽丽的分割线 ————————————

在 CentOS 6.5 上编译安装 PostgreSQL 9.3 数据库 http://www.linuxidc.com/Linux/2016-06/132272.htm

CentOS 6.3 环境下 yum 安装 PostgreSQL 9.3 http://www.linuxidc.com/Linux/2014-05/101787.htm

PostgreSQL 缓存详述 http://www.linuxidc.com/Linux/2013-07/87778.htm

Windows 平台编译 PostgreSQL http://www.linuxidc.com/Linux/2013-05/85114.htm

Ubuntu 下 LAPP(Linux+Apache+PostgreSQL+PHP) 环境的配置与安装 http://www.linuxidc.com/Linux/2013-04/83564.htm

Ubuntu 上的 phppgAdmin 安装及配置 http://www.linuxidc.com/Linux/2011-08/40520.htm

CentOS 平台下安装 PostgreSQL9.3 http://www.linuxidc.com/Linux/2014-05/101723.htm

PostgreSQL 配置 Streaming Replication 集群 http://www.linuxidc.com/Linux/2014-05/101724.htm

———————————— 华丽丽的分割线 ————————————

PostgreSQL 的详细介绍 :请点这里
PostgreSQL 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-11/137239.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计6951字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中