GAUSSDB相关资料
1、权限管理模型RBAC和ABAC区别?
RBAC:基于角色的访问控制,角色通常是指具有某些共同特征的一组人,例如:部门、地点、资历、级别、工作职责等。在系统初始时Admin根据业务需要创建多个拥有不同权限组合的不同角色,当需要赋予某个用户权限的时候,把用户归到相应角色里即可赋予符合需要的权限。
ABAC:则是通过动态计算一个或一组属性,来判断是否满足某种条件来进行授权判断(可以编写简单的逻辑)。属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当期时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性),所以理论上能实现非常灵活的权限控制,几乎能满足所有类型的需求。权限的判断,需要实时执行,规则过多会导致性能问题。
两者区别:RBAC和ABAC之间的主要区别在于RBAC基于用户角色提供对资源或信息的访问,而ABAC基于用户、环境或资源属性的访问权限。
2、数据库数据加密方式有哪些
(1)、函数加密:字段级,通过调用函数(如md5()等函数)对传入参数进行加密,数据在会话中临时解密,数据库无法自动解密,防止高权限账户窃取数据;
(2)、透明加密:表级,数据在文件落盘时加密,对于需要加密的表创建时通过TDE参数指定加密算法,数据库无感知,内存明文处理,防止基于物理磁盘的数据窃取,TDE秘钥管理分为三层,分别是根秘钥,主秘钥,数据加密秘钥。
(3)、全密态:字段级,数据库无法解密,防止高权限账户窃取隐私数据。在create table或者alter table新增列时,可以将列设置为加密列,给需要的列绑定列加密密钥即可,DML操作与其他表一致,但需要以密态方式(-C)创建客户端连接才可以,如果是非密态模式,那么查看到的数据是密文,未指定加密的列数据均已明文处理,密钥管理分为三层,分别根密钥,主密钥,列加密密钥,密钥均存储于GaussDB client,加强了安全防护;
全密态:字段级,支持密态等值查询,数据库无法解密,防止运维、管理和高权账户等窃取隐私数据,在业务中仅在DDL层做了扩展,在create table或者alter table新增加列时可以将列设置为加密列,给需要加密的列绑定列加密密钥即可,DML操作于其他表一致,但需要以密态方式创建客户端连接才可以,如果是非密态模式,那么查询看到的数据是密文,未指定加密的列均明文处理,密钥管理分三层,分别是根密钥、主密钥和列加密密钥,密钥均存储于GaussDB Client中,减少攻击面。总之,函数加密,是用户把密钥给到数据库,数据库在执行过程中函数时做一个加密动作,在数据库里加密。透明加密是数据库自己找一个密钥,在磁盘落盘时做数据加密,是磁盘加密。全密态加密是客户找到密钥之后先把数据加密,再把数据交给数据库,全生命周期都是密文。
(4)客户端和服务端SSL通信加密:SSL加密支持对称加密、非对换加密、对称加密算法指的是加密和解密使用相同的密钥,特点是算法公开、加密和解密速度快,效率高;非对称加密算法包含两个密钥,公钥和私钥是一对,加密和解密使用不同的密码,特点是算法复杂度高、安全性更高、性能较对称加密差。
常见的算法为AES、DES、MD5和**SM4
3、使用存储过程的优点
(1)、极大的提高SQL语言的功能和灵活性,可以完成复杂的判断和运算。
(2)、通过存储过程的权限限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
(3)、在运行存储过程之前,数据库已对其进行语法和句法分析,并给出优化执行优化方案。这种已经编译好的过程极大地改善了SQL语句性能。
(4)、减少网络传输流量。同一个数据库对象的操作所涉及的SQL语句被组织在程存储过程中,那么当在客户计算机上调用该存储过程时,网络中传送的只是存储过程名和相关参数。
4、存储过程和函数的区别
-
定义方式不同:
存储过程是一组预定义的SQL语句,可以通过参数接收输入数据,并返回输出数据。
函数是一组可重复使用的SQL语句,可以接收输入参数并返回输出值。 -
执行方式不同:
存储过程可以作为独立的单元执行,也可以被其他SQL语句调用。
而存储函数只能被其他SQL语句调用。 -
执行效率不同:
存储过程的执行效率通常比函数高,因为存储过程只需要编译一次,
函数每次被调用都需要重新编译。 -
访问方式不同:
存储过程可以接收输入参数和返回输出参数,
函数只能返回输出参数。 -
语法不同:
存储过程的定义使用CREATE PROCEDURE语句,
存储函数的定义使用CREATE FUNCTION语句。
6 返回值个数不同:
函数必须返回一个值
储过程可以返回零个或多个结果。
-
调用方式不同:
函数通常被用于查询中,可以在SELECT语句中调用,返回一个单一的值。
存储过程一般用于执行一系列操作,可以通过CALL语句来调用。 -
数据修改不同:
函数一般不应该修改数据库中的数据
存储过程可以执行数据的插入、更新或删除等操作。 -
可重用性不同:
函数通常具有更好的可重用性,因为它们返回一个值,可以在不同的查询中调用。
存储过程在执行一系列操作时,更适合用于特定的任务。 -
事务处理不同:
存储过程可以包含事务处理逻辑,使得在执行期间,可以维护数据的一致性和完整性。
函数一般不涉及事务处理。
需要根据具体的需求和任务来选择使用存储过程或函数。存储过程适合用于复杂的数据操作和业务逻辑,而函数适合用于计算和返回单一的结果。
5、存储过程和匿名块的区别
(1)、存储过程是经过预编译并存储在数据库中的,可以重复使用;而匿名块是未存储在数据库中,除非应用重新输入代码,否则无法重复使用。
(2)、匿名块无需命名,存储过程必须声明名字。
(3)、存储过程需要call来调用,匿名块创建完直接就执行了,不需要单独调用。
6、数据可以恢复到指定时间点,使用什么技术实现,与物理文件备份相比,这种依赖哪个关键文件?
将数据恢复到指定时间点需要基于PITR(Point-In-Time-Recover)技术实现,主要需要依赖于全量备份文件、增量备份文件和WAL日志(也叫redo日志,对应文件为xlog)。
恢复时先根据指定时间点找到最近一次全量备份进行恢复,然后逐个恢复这次全量后的增量备份,直到恢复到时间点前最后一次增量备份,从最后一次增量备份到时间点这段时间的数据通过WAL日志进行恢复。
7、全量备份、差分备份和增量备份的区别
全量备份:在备份全部数据时,全量备份需要的时间最长,因为需要备份的数据量大。但是,这种备份方式在恢复速度最快,只需要一个磁盘可恢复丢失的数据,此外,由于需要备份的数据量较大,全量备份可能会占用比较多的存储空间;
差分备份:差分备份是备份自上一次完全备份之后有变化的数据。这种备份方式相较于全量备份,备份数据量少,因此 备份所需要的时间较少。同时,由于只需要对第一次全备份和最后一次差异备份进行恢复,所以恢复时间也相对较快。但是,差分备份的数据恢复过程相较于全量备份和增量备份较为复杂;
增量备份:增量备份是备份上一次备份(包括完全备份、差异备份、增量备份)之后有变化的数据。这种备份方式最大的优点是没有重复的备份数据,因此备份的数据量并不大,备份所需要的时间很短。但是,增量备份的数据恢复比较麻烦,需要所有的增量备份数据才能进行恢复;
三种备份所备份的数据量不一样,所需要的时间也不一样,全量备份不需要依赖于其他任意备份,差分备份和增量备份需要依赖于全量备份。
全量备份需要对所有的数据进行备份,一次备份所需要的时间较长,备份集占用空间较大,但是自身就可以恢复出完整的数据库;
增量备份是对上次备份后,发生改变的数据做备份,与全量相比备份时间较短些,备份集占用空间相对较小,但是恢复数据时,需要依赖全量备份以及到上一次全量备份之间的所有增量备份。
8、差分增量备份和累积增量备份的差别?
(1)、差分增量备份(Differential Incremental Backup)是指备份自上次同级或低级差分增量备份以来所有发生变化的数据块。这意味着,每次进行差分增量备份时,都会从上次备份的结束点开始,备份所有新的或修改过的数据块。例如,如果在某一天进行了0级全备份,然后在后续的每一天都进行差分增量备份,那么第二天的备份将包括自第一天以来的所有变化,第三天的备份将包括自第二天以来的变化,以此类推
(2)、累积增量备份(Cumulative Incremental Backup)备份自上次0级备份以来所有发生变化的数据块。无论中间进行了多少次差分增量备份,累积增量备份总是从0级备份开始,备份所有变化的数据块。因此,累积增量备份的数据量通常比差分增量备份大,因为它包含了从0级备份到当前时刻的所有变化
由于累积增量备份包含了从0级备份到当前时刻的所有变化,它的数据量和占用空间通常会比差分增量备份大。这对于存储资源有限的环境来说,可能是一个需要考虑的因素。
(3)、在恢复数据时,差分增量备份可能需要更多的步骤和时间,它需要从最新的0级备份开始,依次应用所有的差分增量备份。而累积增量备份则相对简单,只需恢复最新的0级备份和最新的累积增量备份即可完成恢复过程。
(4)、综上所述,差分增量备份和累积增量备份的主要差别在于备份的起点和数据量。差分增量备份从上次备份的结束点开始,数据量较小,恢复过程可能较长;而累积增量备份从0级备份开始,数据量较大,恢复过程较快。选择哪种备份策略取决于具体的业务需求和资源情况。
9、全量备份、差分增量备份和累积增量备份等备份集的大小关系?
相同备份周期条件下,备份集的大小关系如下:
全量备份 > 累积增量备份 > 差分增量备份
全量备份的数据是最大的,是执行备份时刻的所有数据;
差分备份的数据虽然没有全量大,但相比较增量更大,因为差分备份的是相较于上次全量备份有变更的数据;
增量备份的数据集大小是有三种备份中最小的,因为增量备份只与上一次备份相比较,无论上一次备份是全量、差分还是增量都可以;
10、什么是数据库事务?介绍GaussDB数据库事务管理的实现
事务作为单个逻辑单元,执行的一系列操作。这些操作作为一个整体,一起向系统提交,要么都执行,要么都不执行。
GaussDB数据库事务支持ACID特性。
A原子性:指事务是一个完整的操作。事务的各个步骤是不可分割的,要么都执行要么都不执行。
C一致性:指当事务完成时,数据必须从一个一致性状态到另一个一致性状态。
I隔离性:指对数据进行修改的所有并发事务都是彼此隔离的。
D持久性:指事务完成后,它对数据库的修改被永久保存。事务日志能够保存事务的永久性。
在GaussDB中,有一个GTM组件,用于协助管理事务,主要用于提供全局事务控制所需的信息,采用多版本并发控制MVCC机制。GaussDB提供了不同的GTM模式,GTM-Lite,GTM-Free。在GTM-Lite模式下,中心事务处理节点的压力得到减轻,事务处理流程进一步优化,GTM的性能和并发瓶颈得到减轻,可实现强一致性:在GTM-Free模式下,中心事务管理节点不再参与事务管理,消除了GTM单点瓶颈,可达到更高的事务处理性能,不支持强一致性,仅支持最终一致性。
11、GaussDB数据库有哪些事务隔离级别?并说明含义
-
Read Uncommitted读未提交,最低的隔离级别,它允许事务未提交的数据,被其他事务所读取。不推荐使用,可能产生数据不一致现象。在协调节点故障无法恢复时或应急时可考虑使用,越过GTM与CN/DN不一致时的阻塞,但建议若写事务不要使用,以免产生数据不一致,读事务可应急使用。
-
Read Committed读已提交,事务只能读到已提交的数据而不会读到未提交的数据,这是缺省值。在读已提交模式里,每个新的命令都是从一个新的快照开始的,而这个快照包含所有到该时刻为止已提交的事务。因此同一事务中,后面的命令将看到任何已提交的其它事务的效果。这里关心的问题是在单个命令里是否看到数据库里完全一致的视图。
-
Repeatable Read 重复读:保证在一个事务内,重复执行的查询返回的结果集是一样。查看不到自身事务开始之后,其他并发事务修改后提交的数据。在这个级别的情况下,在事务中第一次读表时,就会自动获取到所有被查询记录的共享锁,直到关闭连接为止。
GaussDB目前功能上不支持Serializable此隔离级别,设置该隔离级别时,等价于REPEATABLE READ。
- Serializable 序列化:这个级别最高,实现方法是对数据进行锁定,以保证在写操作(INSERT、DELETE和UPDATE 等)期间数据不会被访问。在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不建议使用)。
12、输出命令,启动事务,事务隔离级别为读已提交,只读模式
–开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY。
START TRANSACTION;
SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;
…具体操作…
执行:COMMIT或ROLLBACK命令
ERROR: current transaction is aborted, commands ignored until end of transaction block, firstChar[Q]
这是一个经典报错信息,意味着当前事务已被中止,之后的命令将被忽略,直到事务块结束。 在一个事务块中,如果某条SQL语句执行失败(例如,由于数据约束、权限问题或其他SQL错误),那么pg系数据库为了保证事务的原子性,会将当前事务标记为"中止"状态。在此之后,该事务块中的所有后续命令都会被数据库忽略,直到事务块结束(即遇到COMMIT或ROLLBACK命令,它执行的全是ROLLBACK)。这是pg系数据库的一种安全机制,以防止在事务不完整的情况下执行更多操作。
https://bbs.huaweicloud.com/forum/thread-0211177392181611012-1-1.html
- 点赞
- 收藏
- 关注作者
评论(0)