PostgreSQL(六)用户与角色管理

目录

一、用户与角色的定义

二、用户与角色的区别

三、管理用户与角色(SQL)

四、小实验


一、用户与角色的定义

1、用户与角色数据库用户用来访问、管理数据库中的对象(表、索引.)

2、数据库角色用来管理数据库访问权限,简化权限的管理。在PG中,用户也可以实现这个功能。

3、用户和角色在整个数据库集簇中是全局性的,不是针对某个单一数据库,只要有足够的权限,用户可以访问所有数据库的对象。

4、数据库用户可以分为两类:

超级用户-- postgres

普通用户--根据需要创建

二、用户与角色的区别

1、user:默认拥有 login登陆数据库权限的role

2、role:可以拥有数据库对象,如表、索引,也可以把这些对象上的权限赋予其它角色,以控制哪些用户对哪些对象拥有哪些权限。

3、group:不拥有 replication/ nonreplication、 connection limit属性的role

4、在PG8.1之前,user与group是不同类型的实体,现在可以被看作是role,任意一个role均可自由的在user与 group间转换

三、管理用户与角色(SQL)

快速查看当前所有用户:\du
查看详细用户信息:select * from pg_user;
查看详细角色信息:select * from pg_roles;
查看当前登录用户:select user;

创建用户:CREATE USER $user_name PASSWORD '$password';
创建角色:CREATE ROLE $role_name;

修改用户与角色:ALTER USER[ROLE] $user_name 
        e.g.
        //修改用户名:ALTER USER U2 RENAME TO U22;
        //修改用户的密码:ALTER USER U22 PASSWORD'U22;
        //修改用户的权限:ALTER USER u22 CREATEROLE;
        //修改数据库 testdb中的参数重设为默认值:ALTER USER u22 IN DATABASE testdb RESET all1;
        //修改角色的名字:ALTER ROLE dev RENAME TO dev1;
        //修改角色的权限:ALTER ROLE dev1 SUPERUSER;
        //修改角色的权限:ALTER ROLE dev1 LOGIN;

删除用户与角色:DROP USER[ROLE] [IF EXISTS] $user_name

授权用户某个角色:GRANT $role_name TO $user_name;    (授权后set role $role_name启用生效)


四、小实验

当使用用户wqdb登录数据库、启用角色dbcreate权限之后,使用该权限操作的对象,都会属于该角色而非用户。且此时登录的user也会变为角色名而非用户名。

//1、打开窗口1,使用已有用户wqdb来测试(wqdb没有create database权限)
-bash-4.2$ psql -U wqdb -h 192.168.0.45
wqdb=> create database test1;
错误:  创建数据库权限不够
wqdb=> select user;
 user 
------
 wqdb
(1 行记录)

//2、打开新窗口2,使用超级管理员用户,创建角色dbcreate,并授权给wqdb
postgres=# create role dbcreate with createdb;
CREATE ROLE
postgres=# \du
                              角色列表
  角色名称   |                    属性                    | 成员属于 
-------------+--------------------------------------------+----------
 dbcreate    | 建立 DB, 无法登录                           | {}
 pgloader_pg |                                            | {}
 postgres    | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS   | {}
 wqdb        |                                            | {}

postgres=# grant dbcreate to wqdb;
postgres=# \du
                               角色列表
  角色名称   |                    属性                    |  成员属于  
-------------+--------------------------------------------+------------
 dbcreate    | 建立 DB, 无法登录                          | {}
 pgloader_pg |                                            | {}
 postgres    | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
 wqdb        |                                            | {dbcreate}

//回到窗口1,启用角色并创建数据库
wqdb=> set role dbcreate;
SET
wqdb=> create database test1;
CREATE DATABASE
wqdb=> \l
                                        数据库列表
     名称     |  拥有者  | 字元编码 |  校对规则   |    Ctype    |         存取权限         
--------------+----------+----------+-------------+-------------+------------------------
 postgres     | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 template0    | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres             +
              |          |          |             |             | postgres=CTc/postgres
 template1    | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres             +
              |          |          |             |             | postgres=CTc/postgres
 test1        | dbcreate | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 wqdb         | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =Tc/postgres            +
              |          |          |             |             | postgres=CTc/postgres   +
              |          |          |             |             | wqdb=C/postgres
(6 行记录)
wqdb=> select user;
   user   
----------
 dbcreate
(1 行记录)

做完实验后可以看到,新建的test1数据库的拥有者是角色dbcreate而非用户wqdb。并且窗口1的当前登录用户也从用户wqdb变更了角色dbcreate

pg从某种程度而言,模糊了角色和用户的概念,在pg中,角色也可以登录、拥有对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值