KES 数据库模式介绍

关键字:

数据库;模式;public;权限; 、人大金仓、KingbaseES

概述

一个Kingbase数据库集群包含一个或多个已命名的数据库。用户和用户组在整个集群范围是共享的,但是拥有的数据并不共享。任何与服务器连接的客户端都只能访问在连接请求里声明的数据库。集群中的用户并不一定要有访问集群内所有数据库的权限。共享用户名是指不能有重名用户。若同一集群有两个数据库和一个joe用户,系统可配置为只允许joe访问其中一个数据库。一个数据库包含一个或多个已命名的模式,模式包含表及其它对象,如数据类型、函数、操作符等。相同对象名可以在不同模式定义和使用但不会冲突。与数据库不同,模式不是严格分离的,只要有权限,一个用户可以访问所连接的数据库中的任意模式中的对象。

模式的优点

1、允许多个用户使用一个数据库而不会干扰其它用户。

2、将数据库对象组织成逻辑组,使得它们更便于管理。

3、第三方的应用可以放在不同的模式中,但不会和其它同名对象冲突。

注:模式类似于操作系统层次的目录,但不能嵌套。

创建模式

1、模式创建语句:CREATE SCHEMA 模式名

要创建或者访问模式中的对象,写出一个受修饰的名字,该名字包含模式名及表名,它们之间用一个句点分开。

在模式中创建一个表:CREATE TABLE test_schema.test_table(id INT, name varchar(20));

INSERT INTO test_schema.test_table(id, name) VALUES(12, 'join'),(13, 'bob');

SELECT * FROM test_schema.test_table;

该方式在任何需要表的地方都可用,实际上,更一般的使用模式中表的语法是:

database.schema.table,如:SELECT * FROM test.test_schema.test_table;

2、若一个模式是空的(所有它里面的对象都已经被删除),删除命令为:DROP SCHEMA test_schema;

若一个模式不是空的(如模式里面有表),删除命令为:DROP SCHEMA test_schema CASCADE;

3、若想创建一个他人的模式,需要有创建的权限:

select usename from pg_user;

select current_user;

CREATE SCHEMA schema_name AUTHORIZATION sao;

在当前用户创建模式能成功:CREATE SCHEMA schema_name AUTHORIZATION kmxiao;

4、若没有声明任何模式名字创建了表,则缺省时,表及其对象会自动放到public模式中,每个数据库都包含这样的模式,以下命令是等价的:

CREATE TABLE test_table(id INT);和CREATE TABLE public.test_table_2(id INT);

可见,两种创建表的方式都属于public模式。

模式搜索路径

1、由于使用指定模式中的数据库对象时写出模式名.对象名的方式不方便,因此,表通常使用未修饰的名字引用,该名字只含有表名。系统通过查找一个搜索路径来判断一个表究竟是哪个表,该路径是一个需要查找的模式名列表。在搜索路径里找到的第一个表将被使用。若在搜索路径中没有找到表,将会报告一个错误(即便在数据库其它模式中存在此表)

2、显示当前模式:SHOW search_path;

设置模式的搜素路径后,就可以不使用模式修饰来访问表:

CREATE SCHEMA test_schema;

SET search_path TO kmxiao,test_schema;

当新对象缺省时,将会被默认创建在该模式下,若不明确进行修饰,就不能访问public模式,public模式没有任何特别之处,只是它缺省时就存在,当然也可以将其删除。搜索路径对于数据类型名、函数名、操作符名的运作方式和表名完全相同。数据类型和函数名可以像表名一样加以修饰。

模式和权限

用户也可以在别人的模式里创建对象,若要这样做,需要赋予在该模式上的CREATE权限。缺省时每个人都在public模式上有CREATE和USAGE权限,这样会允许所有可连接到指定数据库上的用户创建对象,当然也可以撤销该权限。

语法为:REVOKE CREATE ON SCHEMA public FROM PUBLIC;

创建用户test_user可在public模式下创建表:

可见,能够正常在public模式下创建表。

执行撤销权限:REVOKE CREATE ON SCHEMA public FROM PUBLIC;

创建表由于权限不够而被拒绝。

在kmxiao用户下创建的test_schema模式,用户test_user不能创建表:

在kmxiao用户下赋予test_user用户创建表的权限:

GRANT CREATE ON SCHEMA test_schema to test_user;

可见,此时用户test_user能够在模式test_schema创建表。

系统表模式

除了public和用户创建的模式外,每个数据库都包含一个sys_catalog模式,它包含了系统表和所有内置数据类型、函数、操作符。

切换到sys_catalog模式:SET search_path TO kmxiao, sys_catalog;

查看系统表:SELECT table_name FROM information_schema.tables WHERE table_schema = 'sys_catalog';

查看内置数据类型:SELECT typname FROM sys_type WHERE typtype = 'b';

查看内置函数:SELECT proname FROM sys_proc;

查看内置操作符:SELECT oprname FROM sys_operator;

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值