数据库对象
数据库对象是数据库逻辑结构的集合,常见的数据库对象有:表、视图、索引、序列、存储过程、包、用户等。
数据库
数据库用于管理各类数据对象,与其他数据库隔离。创建数据对象时可以指定对应的表空间,如果不指定相应的表空间,相关的对象会默认保存在PG_DEFAULT空间中。数据库管理的对象可分布在多个表空间上。
表空间
在GaussDB Kernel中,表空间是一个目录,实例中可以存在多个表空间,里面存储的是它所包含的数据库的各种物理文件。由于表空间是一个目录,仅起到了物理隔离的作用,其管理功能依赖于文件系统。
表
表是一系列二维数组的集合,是数据组织的基础单元,由行(row)和列(column)构成。列又称为字段名。数据库表中的一行数据称为一条记录,多数是由同类信息组成。
视图
视图是一个虚拟表,其本身不存储数据。本质上视图是一个预定义的查询语句,用户可以通过访问视图来检索数据。在SELECT语句汇总涉及到的表称为基表,当基表数据发生变化,视图也会随之变化。删除视图不会对基表产生影响。
- 优点
- 简单性:视图可以简化用户对数据的理解和操作。常用的查询可以定义为视图,用户无需每次都指定全部条件。
- 安全性:通过视图,用户只能访问其可见的数据,表中其他列对用户不可见,从而实现更细粒度的权限控制。
- 缺点
- 性能问题:尽量避免在视图中使用视图(嵌套视图),因为这可能会使查询的性能下降。
- 维护的复杂性:需要考虑修改了基表表结构后视图是否可用。
索引
- 优点
- 加快查询速度,降低数据库的I/O成本。
- 降低数据库的排序成本,可以减少分组和排序的时间。
- 通过唯一索引,可以保证表中数据的唯一性。
- 缺点
- 索引需要占用额外的存储空间。
- 在插入和修改数据时,需要花费更多时间。
用户和角色
- 用户(USER)是数据库的访问主体,每个用户都有自己的用户名和密码。用户可以执行数据库操作,而用户的权限通常来源于分配给用户的角色。
- 初始用户:
数据库安装过程中自动生成的账户称为初始用户。初始用户也是系统管理员、监控管理员、运维管理员和安全策略管理员,拥有系统的最高权限,能够执行所有的操作。如果安装时不设置初始用户名称,则该账户与进行数据库安装的操作系统用户同名。如果在安装时不设置初始用户的密码,安装完成后密码为空,在执行其他操作前需要通过gsql客户端修改初始用户的密码。如果初始用户密码为空,则除修改密码外无法执行其他SQL操作以及升级、扩容、节点替换等操作。
- 初始用户的OID为10,可以通过gs_roles视图查询。
- 初始用户会绕过所有权限检查。建议仅将初始用户作为DBA管理用途,而非业务应用。
- 系统管理员(SYSADMIN):
系统管理员是指具有SYSADMIN属性的账户,默认安装情况下具有与对象所有者相同的权限,但不包括dbe_perf模式的对象权限。
要创建新的系统管理员,请以初始用户或者系统管理员身份连接数据库,并使用带SYSADMIN选项的CREATE USER语句或ALTER USER语句进行设置。
--创建时指定该用户为系统管理员。 gaussdb=# CREATE USER u1 WITH SYSADMIN PASSWORD '********'; --创建用户后使用ALTER语句指定该用户为系统管理员。 gaussdb=# CREATE USER u2 PASSWORD '********'; gaussdb=# ALTER USER u2 SYSADMIN; --删除。 gaussdb=# DROP USER u1; gaussdb=# DROP USER u2;
- 安全管理员(CREATEROLE):
安全管理员是指具有CREATEROLE属性的账户,具有创建、修改、删除用户或角色的权限,和授予或者撤销任何非系统管理员、内置角色、永久用户、运维管理员的权限。
要创建新的安全管理员,三权分立关闭时,请以系统管理员或者安全管理员身份连接数据库。三权分立打开时,请以安全管理员身份连接数据库,并使用带CREATEROLE选项的CREATE USER语句或ALTER USER语句进行设置。
--创建用户时指定用户为安全管理员。 gaussdb=# CREATE USER u1 WITH CREATEROLE PASSWORD '********'; --创建用户后使用ALTER语句指定该用户为安全管理员。 gaussdb=# CREATE USER u2 PASSWORD '********'; gaussdb=# ALTER USER u2 CREATEROLE; --删除。 gaussdb=# DROP USER u1; gaussdb=# DROP USER u2;
- 审计管理员(AUDITADMIN):
审计管理员是指具有AUDITADMIN属性的账户,具有查看和删除审计日志的权限。
要创建新的审计管理员,三权分立关闭时,请以系统管理员或者安全管理员身份连接数据库。三权分立打开时,只能以初始用户身份连接数据库,并使用带AUDITADMIN选项的CREATE USER语句或ALTER USER语句进行设置。
--创建时指定该用户为审计管理员。 gaussdb=# CREATE USER u1 WITH CREATEROLE password '********'; --创建用户后使用ALTER语句指定该用户为审计管理员。 gaussdb=# CREATE USER u2 PASSWORD '********'; gaussdb=# ALTER USER u2 CREATEROLE; --删除。 gaussdb=# DROP USER u1; gaussdb=# DROP USER u2;
- 监控管理员(MONADMIN)
监控管理员是指具有MONADMIN属性的账户,具有查看dbe_perf模式下视图和函数的权限,亦可以对dbe_perf模式的对象权限进行授予或收回。
要创建新的监控管理员,请以系统管理员身份连接数据库,并使用带MONADMIN选项的CREATE USER语句或ALTER USER语句进行设置。
--创建时指定该用户为监控管理员。 gaussdb=# CREATE USER u1 WITH MONADMIN password '********'; --创建用户后使用ALTER语句指定该用户为监控管理员。 gaussdb=# CREATE USER u2 PASSWORD '********'; gaussdb=# ALTER USER u2 MONADMIN; --删除。 gaussdb=# DROP USER u1; gaussdb=# DROP USER u2;
- 运维管理员(OPRADMIN)
运维管理员是指具有OPRADMIN属性的账户,具有使用Roach工具执行备份恢复的权限。
要创建新的运维管理员,请以初始用户身份连接数据库,并使用带OPRADMIN选项的CREATE USER语句或ALTER USER语句进行设置。
--创建时指定该用户为运维管理员。 gaussdb=# CREATE USER u1 WITH OPRADMIN password '********'; --创建用户后使用ALTER语句指定该用户为运维管理员。 gaussdb=# CREATE USER u2 PASSWORD '********'; gaussdb=# ALTER USER u2 OPRADMIN; --删除。 gaussdb=# DROP USER u1; gaussdb=# DROP USER u2;
- 安全策略管理员(POLADMIN)
安全策略管理员是指具有POLADMIN属性的账户,具有创建资源标签、脱敏策略和统一审计策略的权限。
要创建新的安全策略管理员,请以系统管理员用户身份连接数据库,并使用带POLADMIN选项的CREATE USER语句或ALTER USER语句进行设置。
--创建时指定该用户为安全策略管理员。 gaussdb=# CREATE USER u1 WITH POLADMIN password '********'; --创建用户后使用ALTER语句指定该用户为安全策略管理员。 gaussdb=# CREATE USER u2 PASSWORD '********'; gaussdb=# ALTER USER u2 POLADMIN; --删除。 gaussdb=# DROP USER u1; gaussdb=# DROP USER u2;
- 普通用户:这些用户通常被赋予执行特定业务操作所需的权限。普通用户的创建可以通过CREATE USER语句,并且可以指定密码、有效时间、连接限制等。
--创建用户u1。 gaussdb=# CREATE USER u1 PASSWORD '********'; --删除。 gaussdb=# DROP USER u1;
- 初始用户:
- 角色(ROLE)是一组权限的集合,用于组织和管理权限。通过将角色授予给用户,使用户继承角色的所有权限。角色之间的权限可以继承。
- public角色:GaussDB提供了一个隐式定义的角色public,所有创建的用户和角色默认属于public角色。可以通过GRANT和REVOKE语句来修改PUBLIC的权限。
- 内置角色:GaussDB提供了一组默认角色,以gs_role_开头命名,这些角色提供了对特定高权限操作的访问。例如,gs_role_signal_backend角色允许调用函数来取消或终止其他会话,而gs_role_tablespace角色允许创建表空间。
- 用户与角色的关系:用户的权限来自于角色。用户可以看作是具有登录权限的角色,而角色可以看作是没有登录权限的用户。通过角色,可以更方便地管理和分配权限,尤其是在有多个用户需要相同权限的情况下。通过这些机制,GaussDB实现了灵活且安全的权限管理,使得数据库管理员可以根据业务需求和安全性要求,合理地分配和管理用户权限。
--创建角色r1。 gaussdb=# CREATE ROLE r1 PASSWORD '********'; --创建用户u1。 gaussdb=# CREATE USER u1 PASSWORD '********'; --将角色r1权限赋予u1。 gaussdb=# GRANT r1 TO u1; --查询上述的角色和用户信息。 gaussdb=# \du r1|u1; List of roles Role name | Attributes | Member of -----------+--------------+----------- r1 | Cannot login | {} u1 | | {r1} --删除用户和角色。 gaussdb=# DROP USER u1; gaussdb=# DROP ROLE r1;