postgresql怎么给一个用户赋予权限

postgresql怎么给一个用户赋予权限,第1张

grant db_role1 to db_user1,db_user2意为:给用户1,2赋予角色1,两个用户就拥有了角色1对应的权限

1、角色

PostgreSQL使用角色的概念管理数据库访问权限。 根据角色自身的设置不同,一个角色可以看作是一个数据库用户,或者一组数据库用户。 角色可以拥有数据库对象(比如表)以及可以把这些对象上的权限赋予其它角色, 以控制谁拥有访问哪些对象的权限。

2、角色的权限

一个数据库角色可以有很多权限,这些权限定义了角色和拥有角色的用户可以做的事情。

3、用户

其实用户和角色都是角色,只是用户是具有登录权限的角色。

4、赋予角色控制权限

可以使用GRANT 和REVOKE命令赋予用户角色,来控制权限。

如:

create role db_role1 createdb createrole--创建角色1

grant db_role1 to db_user1,db_user2--给用户1,2赋予角色1,两个用户就拥有了创建数据库和创建角色的权限

revoke db_role1 from db_user1--从用户1移除角色1,用户不再拥有角色1的权限。

扩展资料

1、角色权限相关脚本

create role db_role1 LOGIN--创建具有登录权限的角色db_role1

create role db_role2 SUPERUSER--创建具有超级用户权限的角色

create role db_role3 CREATEDB--创建具有创建数据库权限的角色

create role db_role4 CREATEROLE --创建具有创建角色权限的角色

alter role db_role1 nologin nocreatedb--修改角色取消登录和创建数据库权限

2、用户相关脚本

create user db_user1 password '123'--创建用户

create role db_user1 password '123' LOGIN--同上一句等价

drop user db_user1--删除用户

alter user db_user1 password '123456'--修改密码

alter user db_user1 createdb createrole--对用户授权

参考资料

百度百科-postgresql

Pg权限分为两部分,一部分是“系统权限”或者数据库用户的属性,可以授予role或user(两者区别在于login权限);一部分为数据库对象上的 *** 作权限。对超级用户不做权限检查,其它走acl。对于数据库对象,开始只有所有者和超级用户可以做任何 *** 作,其它走acl。在pg里,对acl模型做了简化,组和角色都是role,用户和角色的区别是角色没有login权限。

可以用下面的命令创建和删除角色,

CREATE ROLE name

DROP ROLE name

为了方便,也可以在 shell 命令上直接调用程序 createuser 和 dropuser,这些工具对相应命令提供了封装:

createuser name

dropuser name

数据库对象上的权限有:SELECT,INSERT, UPDATE,DELETE,RULE, REFERENCES,TRIGGER,CREATE, TEMPORARY,EXECUTE,和 USAGE等,具体见下面定义

typedefuint32AclMode/* a bitmask of privilege bits */

#define ACL_INSERT (1<<0) /* forrelations */

#defineACL_SELECT (1<<1)

#defineACL_UPDATE (1<<2)

#defineACL_DELETE (1<<3)

#defineACL_TRUNCATE(1<<4)

#defineACL_REFERENCES (1<<5)

#defineACL_TRIGGER (1<<6)

#defineACL_EXECUTE (1<<7) /* for functions */

#defineACL_USAGE (1<<8) /* for languages, namespaces, FDWs, and

* servers */

#defineACL_CREATE (1<<9) /* for namespaces and databases */

#defineACL_CREATE_TEMP (1<<10) /* for databases */

#defineACL_CONNECT (1<<11) /* for databases */

#defineN_ACL_RIGHTS12 /* 1plus the last 1<

#defineACL_NO_RIGHTS 0

/*Currently, SELECT ... FOR UPDATE/FOR SHARE requires UPDATE privileges */

#defineACL_SELECT_FOR_UPDATE ACL_UPDATE

我们可以用特殊的名字 PUBLIC 把对象的权限赋予系统中的所有角色。 在权限声明的位置上写 ALL,表示把适用于该对象的所有权限都赋予目标角色。

beigang=# grantall on schema csm_ca to public

GRANT

beigang=# revoke all on schema csm_ca frompublic

REVOKE

beigang=#

每种对象的all权限定义如下:

/*

* Bitmasks defining "allrights" for each supported object type

*/

#defineACL_ALL_RIGHTS_COLUMN (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_REFERENCES)

#defineACL_ALL_RIGHTS_RELATION (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_DELETE|ACL_TRUNCATE|ACL_REFERENCES|ACL_TRIGGER)

#defineACL_ALL_RIGHTS_SEQUENCE (ACL_USAGE|ACL_SELECT|ACL_UPDATE)

#defineACL_ALL_RIGHTS_DATABASE (ACL_CREATE|ACL_CREATE_TEMP|ACL_CONNECT)

#define ACL_ALL_RIGHTS_FDW (ACL_USAGE)

#defineACL_ALL_RIGHTS_FOREIGN_SERVER (ACL_USAGE)

#defineACL_ALL_RIGHTS_FUNCTION (ACL_EXECUTE)

#defineACL_ALL_RIGHTS_LANGUAGE (ACL_USAGE)

#defineACL_ALL_RIGHTS_LARGEOBJECT (ACL_SELECT|ACL_UPDATE)

#defineACL_ALL_RIGHTS_NAMESPACE(ACL_USAGE|ACL_CREATE)

#defineACL_ALL_RIGHTS_TABLESPACE (ACL_CREATE)

用户的属性可参见下图:

视图 pg_roles提供访问数据库角色有关信息的接口。 它只是一个 pg_authid 表的公开可读部分的视图,把口令字段用空白填充了。

Table 42-39.pg_roles字段

名字

类型

引用

描述

rolname

name

角色名

rolsuper

bool

有超级用户权限的角色

rolcreaterole

bool

可以创建更多角色的角色

rolcreatedb

bool

可以创建数据库的角色

rolcatupdate

bool

可以直接更新系统表的角色。(除非这个字段为真,否则超级用户也不能干这个事情。)

rolcanlogin

bool

可以登录的角色,也就是说,这个角色可以给予初始化会话认证的标识符。

rolpassword

text

不是口令(总是 ********)

rolvaliduntil

timestamptz

口令失效日期(只用于口令认证);如果没有失效期,为 NULL

rolconfig

text[]

运行时配置变量的会话缺省

cd /home/sd/

ls

cd snorkel/snorkel

cd contrib/fonduer/

ls

cd tutorials/

ls

cd Pledgee/   再如:cd End-Position/

ls

cd data/

再如::~/snorkel/snorkel/contrib/fonduer/tutorials/End-Position$ cd data

创建数据库:sd为登陆机器的账号(postgres=#) create database zhiya_key_para_txt_pledge_num_unlimit owner sd

pg_dump用于备份postgresql数据库,它可以在数据库运行时使用,pg_dump不会阻塞其他的用户访问数据库。

将数据库的东西转存到文件里:相当于copy数据库

pg_dump end_position_key_para >end_position_para_2018-03-29.dmp

之前的文件转到新建的数据库里:相当于恢复外部数据到数据库里

psql zhiya_key_para_txt_pledge_num_unlimit <end_position_para_2018-03-29.dmp

mv filename/ . 将文件移动到当前路径

二、对数据库中的表进行 *** 作

psql zhiya_key_para_txt   进入到数据库中的表zhiya_key_para_txt

zhiya_key_para_txt=>\dt 查看该库中的所有表

zhiya_key_para_txt=>select count(*) from candidate

zhiya_key_para_txt=>select count(*) from gold_label

select * from gold_label_key

zhiya_key_para_txt=>\q  退出psql

3、更新数据库中标错的质押人、质权人:

psql zhiya_key_para_txt

zhiya_key_para_txt=>select * from gold_label

zhiya_key_para_txt=>select * from gold_label where candidate_id = '33335'

zhiya_key_para_txt=>update gold_label set value=1 where candidate_id = '33335'

zhiya_key_para_txt=>select * from gold_label where candidate_id = '33335'


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9457204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存