(完整版)人大金仓KingbaseES中的用户与模式概念及关联

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

KingbaseES中的用户与模式概念及关联

一、用户

在实际应用中,作为数据库管理员,必须确保需要访问的数据库的个人具有适当级别的权限,为了使用户能够创建和管理对象,DBA需要为用户授予适当的权限。一旦某个用户创建了一些对象,该用户随之可以被授予操纵这些对象的权限,而DBA不需要涉及对单个用户所创建对象的管理权限。

要想访问数据库,任何人需要成为能够通过数据库身份认证的有效数据库用户,则可以配置应用程序要求每个需要进行访问的个体都具有不同的数据库账户,同时也可以配置应用程序自身作为公共用户连接数据库并在内部处理应用程序级别权限,无论哪一种方式,在数据库中内都需相应地创建一个或多个允许操纵数据的用户。

需要提到的是,在KingbaseES中,用户是实例级的,所以我们平时在KingbaseES中,虽在不同数据库下,查询系统表SYS_USER、SYS_DATABASE中看到关于用户的信息结果都是一致的,记录的是所有的用户、所有的数据库。用户与数据库是一对多的关系。无论当前连接在哪个数据库下,创建的用户都是实例级。

在KingbaseES中创建用户时,该用户默认有当前数据库的connect权限,当需要连接登录到其它用户创建数据库时,需要DBA将其它数据库的CONNECT权限赋予该用户才能正常登录,但该用户需要访问操作数据库下的其他用户所创建的对象时,同样需要被赋予相应的权限才可行。另外,在KingbaseES中,用户拥有connect权限登录数据库后,默认情况下用户拥有PUBLIC模式CREATE 的权限(下文中会详细说明),即默认该用户可以在PUBLIC模式下创建属于自己的数据对象。

数据库管理系统为了方便各用户对数据对象的管理,如同在KingbaseES Help里提到的,在实际应用场景下,为了:

➢多个用户使用同一个数据库而不会相互影响。

➢对数据库中的对象进行逻辑分组,更便于管理。

➢各个应用分别使用各自的模式,以避免命名冲突。

而引入模式的概念。

二、模式

模式(SCHEMA)是一个逻辑数据结构概念,可以理解成是表,视图等一系列数据对象的集合。也称为命名空间,不同模式下的数据库对象可以重名。其类似于操作系统层次的目录,只不过模式不能嵌套。

Oracle

在Oracle中,每个数据库用户拥有一个与之同名的模式,所以在Oracle中,模式则可以理解成是某个用户拥有的所有对象的集合。当Oracle的某一用户登录数据库,不指定模式时,默认是在该用户同名模式下的数据对象进行操作。

Oracle在创建数据库的同时会创建多个数据库用户,这些用户在默认情况下被锁定,只有SYS和SYSTEM两个用户始终会被创建且始终没有被锁定。SYS用户拥有数据字典及其关联的所有数据对象,SYSTEM则可以访问数据库内的所有对象。

Kingbase

在KingbaseES中,在创建数据库时,会默认创建三个模式:PUBLIC、SYS_CATALOG、以及INFORMATION_SCHEMA。

➢PUBLIC:我们平时在使用KingbaseES时,经常会没有声明任何模式名字就创建了表。

其实这是在默认情况下,这样的表(以及其它对象)都自动放到一个叫做"PUBLIC"的模式

中去了。可以看到在默认情况下,下面的语句是等效的:

CREATE TABLE products ( ... );

CREATE TABLE public.products ( ... );

从上面例子以及该模式的名字意思我们就能大致理解,PUBLIC是一个公共模式,在默认情况下,数据库中的每个用户都是可以在PUBLIC模式上有CREATE和USAGE权

限,在数据库中不指定明确指定模式而创建对象时,默认是在PUBLIC模式下创建。

另外,在默认情况下,用户是无法访问模式中不属于他们所拥有的对象的。为了让他们能够访问,模式的所有者需要在模式上赋予他们USAGE权限。为了让用户使用模

式中的对象,我们还可能需要赋予适合的该对象额外权限才可行。同时,不用用户也可

以在别人的模式里创建对象。但需要被赋予在该模式上的CREATE 权限。

➢INFORMATION_SCHEMA:可称为信息模式,在SQL 92标准中定义,主要包含有关当前数据库里定义的对象的信息,主要是由一系列视图组成,因为其中视图结构、数据

类型等都是标准定义,所以可以认为在不同数据库中都是可移植的,并且相对稳定。

它与系统表不一样,因为系统表是各RDBMS特有的,是在实现的基础上进行的建模。

所以我们经常可以看到一些数据库使用者,也许在接触一个新的关系数据库管理系统

产品时,可能对其系统表等的使用还不是很熟悉,但又想查一些系统数据的基本信息,所以可能就会考虑这个数据库系统是否定义了INFORMATION_SCHEMA?如果有,这样就能较快地到INFORMATION_SCHEMA中根据可利用的视图来获取信息。

在主流RDBMS中目前支持信息模式的包括MS SQL Server、PostgreSQL、MySQL、KingbaseES等,Oracle在这部分目前没有遵照标准定义提供INFORMATION_SCHEMA模

式。

注:缺省的时候,信息模式不在模式搜索路径中,因此,我们需要用全称来访问里面的所有对象。

➢SYS_CATALOG模式用于存放系统表和所有内置的数据类型、函数和操作符。

SYS_CATALOG总是搜索路径中的一部分。如果它没有明确出现在路径中,那么它隐含地在所有路径之前搜索。这样就保证了内置数据对象名字总是可以被搜索到。

模式的搜索路径(Search_path)

当用户在创建或使用数据库对象而没有指定模式时,为什么会默认在PUBLIC模式下创建?能否修改默认模式?答案是肯定的,就是上文中提到的“搜索路径”。

在KingbaseES中,系统是根据搜索路径(对应系统参数:search_path,会话级)来确定该对象所属的模式。搜索路径包含一组模式列表,系统在使用数据对象时,会使用第一个搜索匹配的数据库对象。如果在搜索路径中没有找到匹配的对象,系统将会报错。例如系统存在名为SCHEMA1、SCHEMA2的模式,设置search_path= SCHEMA1, SCHEMA2,PUBLIC; 则搜索路径会依次在SCHEMA1、SCHEMA2、PUBLIC模式路径下进行搜索。一旦搜索到第一个匹配的对象,就返回对象信息。停止搜索。

search_path参数的默认值是:$user,public。在设置时若不特别指定,所设参数值默认进行大写转换。其含义是首先搜索与用户名相同的模式,如果该模式不存在,则使用PUBLIC模式。因此,当用户没有自己的模式并且其创建或使用数据库对象没有指定模式时,会默认在PUBLIC模式下创建。

在KingbaseES 6.1.3以后的版本中,增加了compatible_level参数的一个取值:oracle,若设置compatible_level=’oracle’时,则在创建用户的同时,会在所连接的数据库中创建一个用户同名的模式,以兼容Oracle每个用户对应一个同名模式,并根据search_path的取值,默认首先在用户同名模式下搜索数据库对象。所以就能实现我们之前的ORACLE用户习惯的用法,即,每个用

相关文档
最新文档