开发者学堂课程【PolarDB for PostgreSQL 开源人才初级认证培训课程:用户和权限管理】学习笔记(一),与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1077/detail/15553
用户和权限管理
内容介绍
一、目标
二、创建用户
三、创建角色
四、权限介绍
五、给用户授权
六、给角色授权
七、回收权限
本节介绍如何去创建用户和角色,以及怎么样授权或者回收。然后清楚用户和角色它的一个概念。
一、目标
那首先看一下在 PG 数据库下面,用户和角色的一个概念,用它来访问管理数据库的这些对象角色。这个正常情况下面数据库的角色它是用来简化这个权限的管理。我们可以把权限给这个角色,然后再把这个角色的权限给这个用户。这个用户就拥有了这个角色里面所拥有的权限。
在 PG 数据库下面,用户和角色的概念非常接近。有的时候如果给角色分配了可登录的权限,那么这个角色也可以跟用户一样用它来登录来创建这个对象。在 IT 数据库,我们可以把用户和角色进行登录。还有那我们在创建用户和角色的,它是全局的。
在登录到某一个数据库的时候,它针对的是整个集群的这个数据库。根据用户的这个权限,我们可以把它分为两类,一类是超级用户在安装完 code DB 以后,那么默认就有一个超级用户 host bras ,其他的普通用户我们可以根据需要去创建。超级用户就拥有了数据库里头所有的权限。
对用户和角色又做了一个区分。可以把用户和角色的一个概念我们可以回答进行等同。除了用户和角色以外,还有一种角色我们做 group, 它除了不拥有这些属性以外,那么我们可以把它当做是一个特殊的一个入口,它实际上就是个入口,这个入口不能有这些权限。
二、创建用户
创建一个用户,那我们有两种模式,一种我们是在操作系统下面去创建数据库的用户。这时候我们是不需要登录到数据库。还有一种情况是我们都用到数据库,比方说我现在在操作系统运营,创建一个用户, create user ,然后 u1 , u2 也有了。
在创建的时候,他后台的处理方式实际上面是也要先登录到数据库,然后再执行这个 create user 这个 BD 被这个命令把这两步的操作它把我们这个简化。
它的操作方式都一样,都要登录到数据库,然后去创建。正常情况下面,可能是在这个数据库里面我们去创建用户。在数据库里头创建一个用户,那我们创建的时候我们就可以给他分配不同的权限。
在 PG 数据库下面,我们创建的用户的时候,可以同时给他分配这些权限。那么这些权限都是特殊的权限,我们不能用 grant 来搜索。不像我们 Oracle 一样,我们见了一个用户以后,我们需要用 grant 命令,一步一步地给这个用户授权。那么在 PG 数据库下面,这些权限是特殊的权限,但不能用blunt ,除非在创建的时候就马上给予或者我们用 bot user 去修改它。
那么这些特殊的权限包括什么?比如说你可以指定他是不是一个超级管理员,是不是有创建数据库的权限,是不是有创建角色的权限,或者有创建用户的权限?还有你这个用户能不能怎么来继承所拥有的权限,还有这个用户是不是有登录的权限等等,是不是有这个 replication 的这些权限。
那么这些权限大家注意,都是特殊的权限,那我们要给或者修改的时候,我们在 plant 或者 create user 进行怎么来授权。
预览用这个 password 这个关键字 create user ,然后 password 后面跟上你的用户的避难。然后对于我们在受我们在创建的时候,在这个部分我们是可以给他分配权限。创建的时候我给他一个 create DB 的权限,那么这个用户就可以创建数据库。那么我们在受创建的时候,可以添加一些属性,比方说告诉用户,这个有效期可以指定到哪个时间段。就像刚才这些被视为特殊权限。然后要继承的话,比如说我授给你这个用户的权限允许不允许继承,这个三个权限是不能继承的。
三、创建角色
那么创建角色的语法跟创建用户的语法几乎一样。管理用户和管理权限的时候,如何理解?就是角色和用户最大的区别就是角色默认没有捞组的权限,那如果我给了他一个 logic 权限,那么角色我们在进行什么?它的语法用户一样,通常是用角色来对权限进行什么?创建完用户和角色以后,我们可以用 DU 来写字,用 PC 和命令 dud 就是 display U 就是user 。
看到角色的名字,这里头你看到的有可能是用户或者角色,那么在 PT 下面它是把它怎么当做统一来管理。可以直接看这个角色所拥有的这个权限,以及它是不是属于哪个用户或者角色。
除了我们 DU 以外,我们也可以通过这个数据字典来访问,可以通过 PG user 或者 PG ruler 来查看。
比方说这个 postgres 这个用户,看这个用户有什么权限?如果是 true 就说明可以,看他是不是超级用户, true 就是能不能用来去做, reputation true 可以。
我们如果通过这个 PD rules 这个数据字典,看到的很多一些信息跟 PDU 则是看到的非常相似。比如说定位这个用户,定位这个用户然后再看是不是超级用户 false 是不是可以创建用户也是 false 能不能创建数据库? no 能不能登录 true 就这个是可以登录。
这是通过数据字典去查看用户决策的信息。作为 DBA ,想获取什么信息,你要访问什么数据质检,是最基本的什么一个要求。
那如果说我们要修改一个用户的属性,比方说权限名字或者密码,那我们用 bot user 这个命名 old user 。
授予你这个用户不同的这些特殊的权限。比方说我可以给用户改名relay ,然后可以修改密码,然后我可以怎么样给他授予新的权限,假如说我在这个数据库在 test DB 为这个用户我设置了很多参数,想把这些参数把它给取消就用 reset board 。
那么用户和角色我们可以创建也可以删除。那么删除用户的时候在操作系统下面用这个 drug user 来删除。那么删除的时候没有设置的那种如何做?性能关系,在删除的时候你看你要指定你要登录的用户名,这个用户名必须要有创建,用户的一个权限,同时给他一个密码。
PG 会用这个用户登录到数据库,然后执行 drop user 这个秘密。把我们分为两步做的工作分量完成,或者我们用 drop ruler 或者 drop user 来进行。那么我们在 drop 的时候,假如这个用户或者觉得不存在,可以判断, job book diff 一个 diss ,假如存在就删掉,如果不存在就不删,这样就不会报错。
假如说在脚本里头,我可能去需要进行用户和角色的这个删除。不写这个判断语句,那么它可能就会报错。到错以后,你这个脚本执行的时候,你可能就下面的无法执行了。
如何让它不产生报错的信息。那么什么样的权限才能够去删除用户呢?首先是超级用户或者有相应的权限,在这两个还有我们在删除用户前,我们首先要删除该用户所有的对象和权限。如果说这个用户他在我的数据库下面我创建了很多对象,那么你在删除用户之前,你应该把这个对象把它给删掉,或者把他授权给其他人。所以我们在 PG 用户数据库下面,我们如果要删除一个用户,那会稍微复杂一点,然后再抛到滴滴。
假如说我这个用户,在这个多个数据库下面都有它创建的对象。在删除这个用户之前,一定要把这些对象删掉,它会报错。比方说我现在以 UE 用户去登录到这个数据库,然后我登录到这个我是在 postgres 下面,创建一个表,然后我又在 test DB 数据库下面,我又传进了一个也一样的第二个。现在要把这个用户给删掉,会报错。在这个数据库下有什么有它的对象有这个 t2 的这个对象,说两个对象在 test DB。那我能不能用一个 peace K 的呢?就是 PG 不支持这个什么级别的这种删除。那我们如果要删这个 UE 这个用户,首先你要到这个数据库下去删多少个 pable t2
在 case 的 BD 可能报错不是那么基于准。然后我把这些对象都给删掉。当前这个登录的用户你是不能删掉的,所以可以退出。
因为一些对象依赖,原来这个 UE 有一些依赖它的应该没有。那么再看没有用 either ,Q1 订单也没有。 刚才这个用用户的时候,这个数据库上面还有包含这个对象。
当前是没有 UE 这个对象,那我们用这个命令,它只能显示你当前的这个表或者视图,还有其他的对象。那么除了这些正常的对象以外,还有一个对象叫做schema ,用这个比例干 BN 看一下我这个数据库下面有哪一些 schema 你会发现原来 UE 这个用户还建了一个模式叫 stop, 这也是一种对象。
那这个对象比较特殊,后面会讲什么叫做 schema, 那如果我要把这个 UD 把它给删掉,你应该 drop sticking up spot, 这个 u1 用户应该没有,在这个 test DB 上面应该没有其他的对象。
说权限就在这个 test DB 上面还有一些权限。查一下这个数据库上面还有什么权限。把这个 UE 用户所创建的删掉以后,再删除这个用户的时候,报告说在这个 test DB 下面又有一些权限,这个数据库的某一些权限我给了这个 EV 这个用户,要删除这个用户,你还要把赋给这个用户的这些权限给删掉。可以用这个 revoke meeting ,我们把授权给这个用户在 test DB 数据库上面的所有权限把它给撤回,然后就可以删这个用户。
在 PD 数据库下面,删除用户,需要比较复杂的一个过程,要删除这个用户所创建的对象。还有你在这个数据库上面给他授权的哪一些权限等等都要删除。
没有清除干净,一般它都会有个提示,那我们就可以根据这个提示把相应的怎么信息把它给删掉。前面讲了这个角色的管理是为了简化我们的这个权限。那么在 PG 输入上面,授权给这个用户一个角色以后,如果我们要用到这个角色里边的一个权限,要把这个角色生效一下,我们要用 set ruler 这个命令这种方式,在 Oracle 里头也是一样的。 Oracle 里头如果我们分配给角色,没有默认角色,我们要使用角色头的权限,必须要把它启用一下,但是在 PG 数据库下面就没有默认角色和非默认角色之分。假如说我现在建个角色这个 manager 然后我把这个角色给他一个答案。
很多的选择了 client or on database test DB to manager ?当前还有一个 u2 用户,然后还可以去 true grant manager two u2 。u2,用这个 u2 来登录来看,如果我是连接到 test DB ,如果想在这个 test DB 并建一个schema。
Trouble 没有权限不允许。要能够建 schema, 因为 manager有权限了,所以要把这个 manager 这个录入来,生效完以后,就能够创建用户这个模式。
我登录到这个以 u2 用户去创建这个 schema ,把授权给他的角色。生效以后又创建了一下还是能够呈现。创建角色,同时给他分配相应的权限。
四、权限介绍
在 PG 下面权限的一个特点就是每个数据库对象你都有一个 owner 是默认情况,下面 owner 拥有这个对象的所有权限,在数据库当中所有的权限都和角色挂钩。如果你是超级用户,对这个权限是不做检查的。
如果不是,那么我们就要走这个 ACL 然后对于数据库对象,只有所有者和超级用户可以做任何操作都要走 ACL,观察 PG 速度。
把这个权限作区分,我们可以分层次地去进行区分我们可以把它分为实例级、数据库级、表、中间级,还有模式级,还有最后是对象,这里的对象就是我们所说的表、视图、索引。通过这个参数 HBA configure 那么这个参数这个文件是在 PG data 所在的目录下,通过它来进行控制你的一个实例访问的答案,一个隔离级别。
这个文件的一个格式这个文件的格式第一列是你的类型,第二列是你访问的数据库,第三列是你访问的用户,第四列是你客户端的地址,第五列是你访问的方式举个例子,比方说这个 host 就是指的是主机。
然后比如那第二列 data base 如果说 all 说明是所有的数据库 user all 是所有的用户 address 你的客户端的来源。
如果我是写一二七点零点一,那就意味着这是我的本地不是有个本地IP ,就我的本地用户。然后你登录的方式就是我信任。是本地登录到我这个服务器,我是不需要的方案用秘密就会登录。 这个我们指的是任何外部的主机,意味着你不管你从外部哪台主机登录过来,如果你是以 host Flash 用户来登录,我就拒绝。那么这个其实也是为了安全性,就是我不让以远程登录的用户用超级用户来登录,那我可以允许本地的用户登录没有?
还有那比方说所有的这个客观在访问我所有用户和密码的追溯的时候,那么用密码来登。比方说要编辑这个文件,你首先要到 pdata 目录下。好有一个 HBA 来看,这是默认的,它有一些你看这是本地。其实你如果是本地登录,这个是通过一二七点零点一访问过来。
Postpone. company 就是说如果你是以客户端的画质来访问我,以任何用户访问我,任何追溯的时候你都要用密码来访问。我们要如何生效你要重新加载一下 reload 或者 restart 一般情况下一个文字 reload 。比方说如果我们用 P SQL 这种另一登录,那么它是第三名,用的是本地的这种方式。那如果我是以远程的方式来登录,那你就要用 P SQL 你要告诉它你要登录的用户名是什么。你的主机你要登录到人才主机。
要指定登录的端口是32。然后登录的时候 5432 看一下它的端口大写的 P 是部门设置参数,不是上个稍等一下小写的小写 P 这个 A 端口数。我去检查一下它这个监听的关口是多少。刚才我们登录的时候报了一个错,说连接不到这个服务器。那么我们刚才检查了一下,是因为我这个 IP 地址我本地的 IP 地址不是111,是113。所以我纠正了一下这里头大写的 U 指定你登录的用户名杠 H 指定你要访问的主机小写的 P 指定你的一些访问的端口。比如说那这时候他就让我们要输入密码,那我们这时候输入 postgres 用户的密码。那初始化 postgres 的密码没有修改。用这个命令把 postgres 密码给他初始化一下或者重新修改一下。
如果你是远程访问,这个能够不需要提供密码行不行。我们把这个 MDD 我们也把它改成 trust 就是你通过远程的方式来访问我这个服务器不需要提供密码。
所以这个我们把它叫做实例级的权限,那么用它来控制哪些主机就哪些主机能够以什么样的用户来访问什么样的数据库,如果是 reject 拒绝。那么 PG 数据上面有比较特殊, 抛到 DB 数据上面。
只要你这个用户有 login 的权限,它是允许所有的用户都能够连接到我这个数据库。 Get up oh. 允许所有的用户都能够连接。你看云虎它有一个角色连接不允许。