位置: 编程技术 - 正文

PostgreSQL 角色与用户管理介绍

编辑:rootadmin

一、角色与用户的区别角色就相当于岗位:角色可以是经理,助理。用户就是具体的人:比如陈XX经理,朱XX助理,王XX助理。在PostgreSQL 里没有区分用户和角色的概念,"CREATE USER" 为 "CREATE ROLE" 的别名,这两个命令几乎是完全相同的,唯一的区别是"CREATE USER" 命令创建的用户默认带有LOGIN属性,而"CREATE ROLE" 命令创建的用户默认不带LOGIN属性(CREATE USER is equivalent to CREATE ROLE except that CREATE USER assumes LOGIN by default, while CREATE ROLE does not)。

1.1 创建角色与用户

CREATE ROLE 语法

CREATE ROLE name [ [ WITH ] option [ ... ] ]where option can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | VALID UNTIL 'timestamp' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid

创建david 角色和sandy 用户postgres=# CREATE ROLE david;  //默认不带LOGIN属性CREATE ROLEpostgres=# CREATE USER sandy;  //默认具有LOGIN属性CREATE ROLEpostgres=# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- david | Cannot login | {} postgres | Superuser, Create role, Create DB, Replication | {} sandy | | {}

postgres=# postgres=# SELECT rolname from pg_roles ; rolname ---------- postgres david sandy(3 rows)

postgres=# SELECT usename from pg_user; //角色david 创建时没有分配login权限,所以没有创建用户 usename ---------- postgres sandy(2 rows)

postgres=# 1.2 验证LOGIN属性postgres@CS-DEV:~> psql -U davidpsql: FATAL: role "david" is not permitted to log inpostgres@CS-DEV:~> psql -U sandypsql: FATAL: database "sandy" does not existpostgres@CS-DEV:~> psql -U sandy -d postgrespsql (9.1.0)Type "help" for help.

postgres=> dtNo relations found.postgres=> 用户sandy 可以登录,角色david 不可以登录。1.3 修改david 的权限,增加LOGIN权限postgres=# ALTER ROLE david LOGIN ;ALTER ROLEpostgres=# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- david | | {} postgres | Superuser, Create role, Create DB, Replication | {} sandy | | {}

postgres=# SELECT rolname from pg_roles ; rolname ---------- postgres sandy david(3 rows)

postgres=# SELECT usename from pg_user;  //给david 角色分配login权限,系统将自动创建同名用户david usename ---------- postgres sandy david(3 rows)

postgres=# 1.4 再次验证LOGIN属性postgres@CS-DEV:~> psql -U david -d postgrespsql (9.1.0)Type "help" for help.

postgres=> du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- david | | {} postgres | Superuser, Create role, Create DB, Replication | {} sandy | | {}

postgres=> david 现在也可以登录了。

二、查看角色信息

psql 终端可以用du 或du+ 查看,也可以查看系统表 select * from pg_roles;postgres=> du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- david | Cannot login | {} postgres | Superuser, Create role, Create DB, Replication | {} sandy | | {}

postgres=> du+ List of roles Role name | Attributes | Member of | Description -----------+------------------------------------------------+-----------+------------- david | Cannot login | {} | postgres | Superuser, Create role, Create DB, Replication | {} | sandy | | {} |

postgres=> SELECT * from pg_roles; rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolconfig | oid ----------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+---------------+-----------+------- postgres | t | t | t | t | t | t | t | -1 | ******** | | | david | f | t | f | f | f | f | f | -1 | ******** | | | sandy | f | t | f | f | f | t | f | -1 | ******** | | | (3 rows)

postgres=>

三、角色属性(Role Attributes)

推荐整理分享PostgreSQL 角色与用户管理介绍,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

一个数据库角色可以有一系列属性,这些属性定义了他的权限。

属性说明login只有具有 LOGIN 属性的角色可以用做数据库连接的初始角色名。superuser数据库超级用户createdb创建数据库权限createrole 允许其创建或删除其他普通的用户角色(超级用户除外)replication做流复制的时候用到的一个用户属性,一般单独设定。password在登录时要求指定密码时才会起作用,比如md5或者password模式,跟客户端的连接认证方式有关inherit用户组对组员的一个继承标志,成员可以继承用户组的权限特性......

四、创建用户时赋予角色属性从pg_roles 表里查看到的信息,在上面创建的david 用户时,默认没有创建数据库等权限。 postgres@CS-DEV:~> psql -U david -d postgres psql (9.1.0) Type "help" for help. postgres=> du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- david | | {} postgres | Superuser, Create role, Create DB, Replication | {} sandy | | {} postgres=> CREATE DATABASE test; ERROR: permission denied to create database postgres=> 如果要在创建角色时就赋予角色一些属性,可以使用下面的方法。 首先切换到postgres 用户。 4.1 创建角色bella 并赋予其CREATEDB 的权限。 postgres=# CREATE ROLE bella CREATEDB ; CREATE ROLE postgres=# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- bella | Create DB, Cannot login | {} david | | {} postgres | Superuser, Create role, Create DB, Replication | {} sandy | | {} postgres=# 4.2 创建角色renee 并赋予其创建数据库及带有密码登录的属性。 postgres=# CREATE ROLE renee CREATEDB PASSWORD 'abc' LOGIN; CREATE ROLE postgres=# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- bella | Create DB, Cannot login | {} david | | {} postgres | Superuser, Create role, Create DB, Replication | {} renee | Create DB | {} sandy | | {} postgres=# 4.3 测试renee 角色 a. 登录 postgres@CS-DEV:~> psql -U renee -d postgres psql (9.1.0) Type "help" for help. postgres=> 用renee 用户登录数据库,发现不需要输入密码既可登录,不符合实际情况。 b. 查找原因 在角色属性中关于password的说明,在登录时要求指定密码时才会起作用,比如md5或者password模式,跟客户端的连接认证方式有关。

查看pg_hba.conf 文件,发现local 的METHOD 为trust,所以不需要输入密码。

PostgreSQL 角色与用户管理介绍

将local 的METHOD 更改为password,然后保存重启postgresql。

c. 再次验证

提示输入密码,输入正确密码后进入到数据库。

d. 测试创建数据库

创建成功。

五、给已存在用户赋予各种权限

使用ALTER ROLE 命令。ALTER ROLE 语法:ALTER ROLE name [ [ WITH ] option [ ... ] ]where option can be:

SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | VALID UNTIL 'timestamp'

ALTER ROLE name RENAME TO new_name

ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENTALTER ROLE name [ IN DATABASE database_name ] RESET configuration_parameterALTER ROLE name [ IN DATABASE database_name ] RESET ALL5.1 赋予bella 登录权限a. 查看现在的角色属性postgres=# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- bella | Create DB, Cannot login | {} david | | {} postgres | Superuser, Create role, Create DB, Replication | {} renee | Create DB | {} sandy | | {}

postgres=# b. 赋予登录权限postgres=# ALTER ROLE bella WITH LOGIN;ALTER ROLEpostgres=# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- bella | Create DB | {} david | | {} postgres | Superuser, Create role, Create DB, Replication | {} renee | Create DB | {} sandy | | {}

postgres=# 5.2 赋予renee 创建角色的权限postgres=# ALTER ROLE renee WITH CREATEROLE;ALTER ROLEpostgres=# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- bella | Create DB | {} david | | {} postgres | Superuser, Create role, Create DB, Replication | {} renee | Create role, Create DB | {} sandy | | {}

postgres=# 5.3 赋予david 带密码登录权限postgres=# ALTER ROLE david WITH PASSWORD 'ufo';ALTER ROLEpostgres=#5.4 设置sandy 角色的有效期postgres=# ALTER ROLE sandy VALID UNTIL '--';ALTER ROLEpostgres=# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- bella | Create DB | {} david | | {} postgres | Superuser, Create role, Create DB, Replication | {} renee | Create role, Create DB | {} sandy | | {}

postgres=# SELECT * from pg_roles ; rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolconfig | oid ----------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+------------------------+-----------+------- postgres | t | t | t | t | t | t | t | -1 | ******** | | | bella | f | t | f | t | f | t | f | -1 | ******** | | | renee | f | t | t | t | f | t | f | -1 | ******** | | | david | f | t | f | f | f | t | f | -1 | ******** | | | sandy | f | t | f | f | f | t | f | -1 | ******** | -- ::+ | | (5 rows)

postgres=#

六、角色赋权/角色成员

在系统的角色管理中,通常会把多个角色赋予一个组,这样在设置权限时只需给该组设置即可,撤销权限时也是从该组撤销。在PostgreSQL中,首先需要创建一个代表组的角色,之后再将该角色的membership 权限赋给独立的角色即可。6.1 创建组角色postgres=# CREATE ROLE father login nosuperuser nocreatedb nocreaterole noinherit encrypted password 'abc';CREATE ROLEpostgres=# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- bella | Create DB | {} david | | {} father | No inheritance | {} postgres | Superuser, Create role, Create DB, Replication | {} renee | Create role, Create DB | {} sandy | | {}

postgres=#6.2 给father 角色赋予数据库test 连接权限和相关表的查询权限。postgres=# GRANT CONNECT ON DATABASE test to father;GRANTpostgres=# c test reneeYou are now connected to database "test" as user "renee".test=> dtNo relations found.test=> CREATE TABLE emp (test(> id serial,test(> name text);NOTICE: CREATE TABLE will create implicit sequence "emp_id_seq" for serial column "emp.id"CREATE TABLEtest=> INSERT INTO emp (name) VALUES ('david'); INSERT 0 1test=> INSERT INTO emp (name) VALUES ('sandy');INSERT 0 1test=> SELECT * from emp; id | name ----+------- 1 | david 2 | sandy(2 rows)

test=> dt List of relations Schema | Name | Type | Owner --------+------+-------+------- public | emp | table | renee(1 row)

test=> GRANT USAGE ON SCHEMA public to father;WARNING: no privileges were granted for "public"GRANTtest=> GRANT SELECT on public.emp to father;GRANTtest=> 6.3 创建成员角色test=> c postgres postgresYou are now connected to database "postgres" as user "postgres".postgres=# CREATE ROLE son1 login nosuperuser nocreatedb nocreaterole inherit encrypted password 'abc';CREATE ROLEpostgres=# 这里创建了son1 角色,并开启inherit 属性。PostgreSQL 里的角色赋权是通过角色继承(INHERIT)的方式实现的。6.4 将father 角色赋给son1postgres=# GRANT father to son1;GRANT ROLEpostgres=# 还有另一种方法,就是在创建用户的时候赋予角色权限。postgres=# CREATE ROLE son2 login nosuperuser nocreatedb nocreaterole inherit encrypted password 'abc' in role father;CREATE ROLEpostgres=# 6.5 测试son1 角色postgres=# c test son1You are now connected to database "test" as user "son1".test=> dt List of relations Schema | Name | Type | Owner --------+------+-------+------- public | emp | table | renee(1 row)

test=> SELECT * from emp; id | name ----+------- 1 | david 2 | sandy(2 rows)

test=> 用renee 角色新创建一张表,再次测试test=> c test reneeYou are now connected to database "test" as user "renee".test=> CREATE TABLE dept (test(> deptid integer,test(> deptname text);CREATE TABLEtest=> INSERT INTO dept (deptid, deptname) values(1, 'ts');INSERT 0 1test=> c test son1You are now connected to database "test" as user "son1".test=> SELECT * from dept ;ERROR: permission denied for relation depttest=> son1 角色只能查询emp 表的数据,而不能查询dept 表的数据,测试成功。6.6 查询角色组信息test=> c postgres postgresYou are now connected to database "postgres" as user "postgres".postgres=# postgres=# du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- bella | Create DB | {} david | | {} father | No inheritance | {} postgres | Superuser, Create role, Create DB, Replication | {} renee | Create role, Create DB | {} sandy | | {} son1 | | {father} son2 | | {father}

postgres=# “ Member of ” 项表示son1 和son2 角色属于father 角色组。

PostgreSQL 查看数据库,索引,表,表空间大小的示例代码 一、简介PostgreSQL提供了多个系统管理函数来查看表,索引,表空间及数据库的大小,下面详细介绍一下。二、数据库对象尺寸函数函数名返回类型描述p

修改一行代码提升 Postgres 性能 倍 在一个(差)的PostgreSQL查询中只要一个小小到改动(ANY(ARRAY[...])toANY(VALUES(...)))就能把查询时间从s缩减到0.2s。从最简单的学习使用EXPLAINANALYZE开始,到

Windows下PostgreSQL安装图解 现在谈起免费数据库,大多数人首先想到的可能是MySQL,的确MySQL目前已经应用在国内很多领域,尤其是网站架设方面。但是,实际上功能最强大、特性

标签: PostgreSQL 角色与用户管理介绍

本文链接地址:https://www.jiuchutong.com/biancheng/319653.html 转载请保留说明!

上一篇:PostgreSQL中的OID和XID 说明

下一篇:PostgreSQL 查看数据库,索引,表,表空间大小的示例代码

  • 增值税专用发票的税率是多少啊
  • 印花税的征税对象是条例列举的凭证未列举的不征税
  • 税后利润和净利润是一样的吗
  • 小规模纳税人不开票收入怎么报增值税
  • 领增值税专票需要发票吗
  • 一般纳税人所得税优惠政策最新2022
  • 甲方代扣水电费怎么做账
  • 税款差0.01是怎么用会计分录处理
  • 带息承兑汇票的利息收入要缴纳增值税吗
  • 非同一控制企业合并下,购买日将
  • 小规模纳税人购车可以抵扣多少税
  • 贴现利息的计算题
  • 支付货款订金入什么科目核算与会计分录
  • 微信支付的钱到哪里去了
  • 异地缴纳个人所得税
  • 个人借款到期未还诉讼时效
  • 没有用完的发票怎么退
  • 上月税没报,可以开发票吗
  • 营改增怎么抵扣
  • 营改增后水费差额征税账务处理怎么做?
  • 企事业承包承租方缴纳的管理费税费
  • 实行差额征税的劳务派遣公司一般纳税人认定标准
  • 简易征收货物的运费
  • 增值税计入无形资产的入账价值吗?
  • 开票退回怎么做账
  • 领用库存商品的消费税
  • 收到货款未发货可以开发票吗
  • win10禁用安全杀毒功能
  • win7为什么不能安装软件
  • 收到汇算清缴后怎么处理
  • 净资产收益率公式推导
  • 销售商品发生的现金折扣
  • mac系统10.10
  • 生活服务业内容
  • 劳务费要申报个税吗怎么申报
  • OfcPfwSvc.exe - OfcPfwSvc是什么进程 有什么用
  • 小微企业的季度所得税怎么计算
  • 事业单位小规模纳税人缴纳附加税有什么,税率是多少
  • php str
  • firewall enable
  • python uiautomator2的点击操作
  • 进项发票数据导出
  • 农业合作社需要纳税吗
  • 用友固定资产模块反结账
  • 企业从政府部门辞职流程
  • 筹办期发生业务怎么办
  • 回扣没拿到也算违法吗
  • windows 和 linux
  • sqlserver存储过程声明变量
  • 房地产企业样板间装修费账务处理
  • 零申报社保是否可以报销
  • 实收资本可以用于偿还借款
  • 日常费用明细表格式
  • 原材料账户该如何做账
  • sqlserver2005属于
  • 固定资产摊余价值怎么计算
  • 房产税城镇土地使用税申报期限
  • 用友t6反记账步骤
  • 结算备付金账户是什么帐户
  • 汇算清缴需要传票么
  • 城建税教育费附加和地方教育费附加
  • 增值税专用发票怎么开
  • 固定资产内部抵扣增值税
  • 减免及返还增值税怎么算
  • 递延收益确认的递延所得税资产有期限吗
  • xp系统鼠标右键无法弹出菜单
  • mac打开下载文件夹
  • linux 杀掉指定用户的进程
  • shwicon.exe - shwicon是什么进程 有什么用
  • win8笔记本电脑投屏方法
  • linux在网络方面的应用
  • JS实现的base64加密、md5加密及sha1加密详解
  • python开发环境有
  • unity角色扮演游戏
  • :javascript
  • android assets
  • 广州税务局前局长是谁
  • 房产证加名字需要哪些手续和费用
  • 税务局自助终端
  • 青岛市崂山区地税局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设