本文将在多个方面为您介绍PolarDB PostgreSQL版(兼容Oracle)与原生Oracle数据库管理的区别。

数据库(database)

  • Oracle 12c之前的版本,默认一个实例只能有一个数据库。12c之后版本有了多租户的概念,允许一个容器数据库(CDB)下同时存在多个可插拔数据库(PDB)。
  • PolarDB集群对应Oracle实例的概念。每个数据库集群上可以创建多个数据库。

用户(user)

  • 相同点:

    PolarDB和Oracle都有user的概念,user可以作为数据库对象的owner,可以用于访问数据库。

  • 不同点:

    Oracle的user被授予CREATE SESSION权限后,才可以登录数据库。PolarDB的user默认有LOGIN权限,可以登录数据库。

创建用户语法如下:

  • Oracle语法:
    CREATE USER user
       IDENTIFIED { BY password
                  | EXTERNALLY [ AS 'certificate_DN' ]
                  | GLOBALLY [ AS '[ directory_DN ]' ]
                  }
       [ DEFAULT TABLESPACE tablespace
       | TEMPORARY TABLESPACE
            { tablespace | tablespace_group_name }
       | QUOTA size_clause
               | UNLIMITED
               }
               ON tablespace
         [ QUOTA size_clause
                 | UNLIMITED
                 }
                 ON tablespace
         ]...
       | PROFILE profile
       | PASSWORD EXPIRE
       | ACCOUNT { LOCK | UNLOCK }
         [ DEFAULT TABLESPACE tablespace
         | TEMPORARY TABLESPACE
              { tablespace | tablespace_group_name }
         | QUOTA size_clause
                 | UNLIMITED
                 }
                 ON tablespace
           [ QUOTA size_clause
                   | UNLIMITED
                   }
                   ON tablespace
           ]...
         | PROFILE profile
         | PASSWORD EXPIRE
         | ACCOUNT { LOCK | UNLOCK }
         ]...
      ] ;
  • PolarDB语法:
    CREATE USER|ROLE name [[WITH] option […]] [IDENTIFIED BY password]
    where option can be the following compatible clauses:
     PROFILE profile_name
     | ACCOUNT {LOCK|UNLOCK}
     | PASSWORD EXPIRE [AT 'timestamp']
    or option can be the following non-compatible clauses:
     | LOCK TIME 'timestamp'

    同时PolarDB还兼容PostgreSQL CREATE USER的语法,详情请参见SQL Commands

角色(role)

  • 在Oracle中,role是一组权限,不能作为数据库对象的Owner,不能被授予其它role,不能用于访问数据库。
  • PolarDB中,role相当于一个user,可以作为数据库对象的Owner,可以被授予其它role或user的权限,可以用于访问数据库。与user的区别在于,role默认没有LOGIN权限,需要被授予LOGIN权限后才能访问数据库,而user默认具有LOGIN权限。

创建角色语法如下:

  • Oracle语法:
    CREATE ROLE role
       [ NOT IDENTIFIED
       | IDENTIFIED { BY password
                    | USING [ schema. ] package
                    | EXTERNALLY
                    | GLOBALLY
                    }
       ] ;
  • PolarDB语法:

    CREATE ROLE 和CREATE USER 语法一致。

模式(schema)

  • 相同点:

    schema是一个逻辑概念,表示一组数据库对象的集合,这些数据库对象也称为模式对象,包括表、索引、视图等。

  • 不同点:
    OraclePolarDB
    无法单独创建schema。可以通过CREATE SCHEMA创建schema。
    创建数据库用户时,系统会自动创建一个和用户名同名的schema。在每个数据库中,都有一个名为PUBLIC的默认schema。可以通过SET SEARCH_PATH TO 'xxx';来修改当前默认schema。

权限(privilege)

PolarDB的权限和Oracle类似,可以分为系统权限和对象权限。

  • 系统权限
    • Oracle

      系统权限是指允许执行特定动作的权限,例如CREATE USER、CREATE TABLE、CREATE TABLESPACE等。

      系统权限还包括一些管理员权限:

      • SYSDBA和SYSOPER:拥有几乎所有的数据库对象的权限。可以执行一些标准的数据库操作,例如数据库的启动和关闭,创建数据库参数文件(SPFILE),更改数据库归档日志等。
      • SYSBACKUP:执行备份和恢复操作。
      • SYSDG:执行Data Guard操作。
      • SYSKM:管理透明数据加密(TDE)钱包操作。
      • SYSRAC:执行Oracle RAC操作。
    • PolarDB

      PolarDB支持LOGIN、POLAR_SUPERUSER、CREATEDB和CREATEROLE等系统权限,您可以在CREATE ROLE/USER时指定用户是否具有对应权限。

  • 对象权限

    对象权限是指对指定的对象执行操作的权限,数据库对象包括表、视图、序列、大对象、模式、函数、过程语言等。对象权限包括SELECT、INSERT、UPDATE、DELETE、ALTER、INDEX、REFERENCES、EXECUTE等,具体的对象权限因对象类型而异。

    • Oracle

      各用户自动拥有相应schema下的所有对象的权限。

    • PolarDB

      修改或删除对象的权限只有对象Owner和超级用户才有。

      说明 超级用户是指拥有POLAR_SUPERUSER权限的用户。

监控运维