postgresql一些常用命令

下文总结作者在工作中用到的postgresql一些常用命令

一、Postgresql数据库权限功能小结

1、权限说明

    Postgresql数据库支持灵活的权限管理,可以控制一个角色(组、用户)对某张表的读、写、更新、删除等操作权限、执行某个函数的权限以及操作(使用、更新等)视图、序列的权限。

    PG的权限管理功能比较强大,可以细化到对一张表的各个字段,比如禁止用户访问一张表里的密码字段等,在稍后的内容中给出详细的解释。

    虽然在PG数据库中把用户、角色统一叫做角色,甚至创建语句都为create role XXX,但用户和角色之间仍有一定的区别。在这里我们统一把拥有登录权限的叫做用户,没有登录权限的叫做角色,用此方式加以区分。实际上,在PgAdmin管理工具中,可以看到用户和角色的区别,没有登录权限的被放在组角色下,有登录权限的被放在登录角色下。

2、基本权限

用户和角色都可以被赋予基本权限,比如创建数据库权限、超级用户权限、创建角色权限等。

比如创建用户的语句为:

CREATE ROLE username LOGIN 

#注意上述username拥有LOGIN的权限,所以叫它用户。

创建角色的语句为:

CREATE ROLE "group" 
#注意这里没有LOGIN权限,所以是角色。

上述角色和用户的创建语句中,都没有赋予超级用户、创建数据库等权限。

3、操作数据库对象权限

只能把数据库对象的操作权限赋予没有登录权限的角色,而不能直接赋予拥有登录权限的用户。

那么这样就带来一个问题,怎么样控制登录用户操作数据库对象的权限呢?

答案是让用户成为角色的成员,此时用户即可拥有角色的权限,进一步限制了登录用户操作数据库对象的权限。

如把上述角色group赋予guest用户:

GRANT "group" TO guest;

赋权之后guest用户就拥有了group角色所拥有的数据库对象权限。比如控制group角色只能对class表执行Insert操作:

GRANT INSERT ON TABLE class TO "group";

此时使用guest用户登录数据后,就只能对表class执行insert操作,无法执行delete、update等操作。

示例代码如下,使用guest用户登录,访问TEST数据库下的class表。

postgres=> \c TEST     您现在已经连线到数据库 "TEST",用户 "guest". 

TEST=> select * from class; 

ERROR: permission denied for relation class 

TEST=> insert into class values(2,'class1'); 

INSERT 0 1

从上述结果中可以看到,guest用户没有权限查询class表,但是可以插入数据库。原因就是只对group角色赋予了class表的insert权限,然后guest用户也就只有class表的insert权限。

前面说到PG的权限管理可以细化到表的某个字段,现在继续用class表和guest用户做实验。

TEST=> \c postgres postgres;         您现在已经连线到数据库 "postgres",用户 "postgres". 

postgres=# \c TEST;                         您现在已经连线到数据库 "TEST",用户 "postgres". 

TEST=# grant select(num) on class to "group";         GRANT 操作

TEST=# \echo                 切换到postgres用户连接TEST数据库,对class表的num字段的select权限赋予group角色 切换到postgres用户连接TEST数据库,对class表的num字段的select权限赋予group角色 

TEST=# \c TEST               guest 用户 guest 的口令: 您现在已经连线到数据库 "TEST",用户 "guest". 

TEST=> \echo                  切换回guest用户登录TEST数据库 切换回guest用户登录TEST数据库 

TEST=> select * from class; 

ERROR: permission denied for relation class 

TEST=> select num from class; 

num 

从上述结果中可以看到,guest用户依然没有查询class表的权限,但是却有了查询class表里的num字段的权限。

在PG数据库中不单单可以控制操作表的权限,其他数据库对象,比如序列、函数、视图等都可以控制。

所以PG的权限控制功能非常强大。

4、解除权限

赋值之后如需解除使用REVOKE命令:

解除select权限

REVOKE select ON tableName FROM "group";  

解除所有权限

REVOKE ALL ON tableName FROM PUBLIC ;

5、一些常用命令总结

创建用户

CREATE ROLE username LOGIN 

注意上述username拥有LOGIN的权限,所以叫它用户。

给用户创建密码

alter user useName with password 'password';

删除用户

drop role name ;

给用户赋权select

grant select on all tables in schema public to username ;

撤销权限

revoke select on tablename from username;

导出建表语句

pg_dump -s database > database.sql

重新在pgsql中重建表

psql -p 5432 -f database.sql database

显示SQL执行时间

timing on;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章