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'
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)