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

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

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

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

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

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

一非模式对象及相关

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值