更新时间:2025-09-19 GMT+08:00
分享

数据库对象

数据库对象是数据库逻辑结构的集合,常见的数据库对象有:表、视图、索引、序列、存储过程、包、用户等。

数据库

数据库用于管理各类数据对象,与其他数据库隔离。创建数据对象时可以指定对应的表空间,如果不指定相应的表空间,相关的对象会默认保存在PG_DEFAULT空间中。数据库管理的对象可分布在多个表空间上。

表空间

GaussDB中,表空间是一个目录,实例中可以存在多个表空间,里面存储的是它所包含的数据库的各种物理文件。由于表空间是一个目录,仅起到了物理隔离的作用,其管理功能依赖于文件系统。

表是一系列二维数组的集合,是数据组织的基础单元,由行(row)和列(column)构成。列又称为字段名。数据库表中的一行数据称为一条记录,多数是由同类信息组成。

  • 表分为普通表和临时表。
    • 临时表的生命周期仅存在于会话期间,会话断开后会自动删除临时表。
    • 临时表可以和普通表重名。当同时存在同名的临时表和普通表时,查看表结构、DML等操作都作用于临时表。
  • 列用于记录表上某个属性的值,用户给每个属性定义的名称称为列名。除了列名以外,还有数据类型以及数据类型最大长度(精度)等信息。

  • 行表示表中单条记录中所有列的集合。表中每行代表一组相关数据,且每行都具有相同的结构。

视图

视图是一个虚拟表,其本身不存储数据。本质上视图是一个预定义的查询语句,用户可以通过访问视图来检索数据。在SELECT语句中涉及到的表称为基表,当基表数据发生变化,视图也会随之变化。删除视图不会对基表产生影响。

  • 优点
    • 简单性:视图可以简化用户对数据的理解和操作。常用的查询可以定义为视图,用户无需每次都指定全部条件。
    • 安全性:通过视图,用户只能访问其可见的数据,表中其他列对用户不可见,从而实现更细粒度的权限控制。
  • 缺点
    • 性能问题:尽量避免在视图中使用视图(嵌套视图),因为这可能会使查询的性能下降。
    • 维护的复杂性:需要考虑修改了基表表结构后视图是否可用。

索引

索引是一种数据结构,包含着对数据表中所有记录的引用指针,类似于书籍的目录,用于加快数据库查询速度和性能。
  • 优点
    • 加快查询速度,降低数据库的I/O成本。
    • 降低数据库的排序成本,可以减少分组和排序的时间。
    • 通过唯一索引,可以保证表中数据的唯一性。
  • 缺点
    • 索引需要占用额外的存储空间。
    • 在插入和修改数据时,需要花费更多时间。
  • 索引的可用性和可见性
    • 索引可用性

      在删除分区场景,如果没有指定需要重建索引字段,会将索引标记为UNUSABLE(即不可用状态)。在DML操作中,索引无需维护,并且优化器会忽略该索引。

    • 索引可见性

      索引的可见性指的是优化器是否忽略该索引。如果索引不可见,优化器会忽略它,但在DML操作中,索引仍需维护。通常,在删除索引之前,可以先将索引设置为不可见状态,以观察对业务的影响。确认无影响后,再删除索引。

用户和角色

  • 用户(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;

相关文档