关键字:

Role、User、Database、Schema、table

1.用户(角色)、数据库、模式、表的概念?

  • 用户和角色对于kes来说是完全相同的两个对象。其唯一的区别是:在创建时,创建的角色没有登录权限,创建的用户是有登录权限的。 直白一点说:能够登录的角色就是用户。
  • 数据库可以理解为是物理层面数据的集合,里面有很多表、视图、函数等。
  • 模式,可以理解为一个命名空间,在不同的模式下可以有相同名称的表、函数等。一个数据库包含一个或者多个模式,模式中又包含表、函数等数据库对象。 直白一点说:模式是对数据库的逻辑分割。
  • 表,和函数等都是数据库对象,用来存储数据。

2.数据库角色与用户的关系

查询当前数据库内所有的角色: test=# select * from dba_roles;

查询当前数据所有的用户信息: test=# select * from dba_users ;

(1)创建角色: test=# create role role01 password ‘role01’; 再次查看数据库的角色信息:

由上图可知多了刚才创建的role01。 接下来我么使用刚才创建的角色进行登录:

出现报错说明该角色没有登录权限。

(2)创建用户 Create user user_name password ***

再次查看数据库的用户信息

多了刚才创建的用户user01。 接下来使用该用户进行登录操作: 登录Kingbase:

./ksql-U用户名-W-p端口号 数据库名[test@h1-20 bin]$ ./ksql -U user01 -W-p10677 test

登录成功

结论:新创建的角色和用户区别在于用户有登录权限而角色没有。

验证:我们该刚才创建的角色role01加上登录权限,看其是否可以登录?

修改role01的权限:

test=# alter role role01 login;

授权后可以登录了。 修改权限以后再次查询所有的角色,发现role01消失了。 修改权限后再次查询数据库所有用户,发现多了一个role01 验证了我们的结论。

3.数据库与模式的关系

模式是对数据库的逻辑分割,在数据库创建的同时,就默认为数据库创建了一个模式—public即为该数据库的默认模式。该数据库所创建的所有对象(表、函数等)都是默认在这个模式中的。
具体实验如下:

(1)创建一个数据库dbtt

(2)使用user01 用户登录到dbtt数据库查看其模式,

(3)在该数据库下创建一张测试表

(4)查看dbtt数据库中所有表的模式

我们没有给他指定模式,其默认就是public模式。

(5)创建一个新的模式new_sch1

注意:创建新的模式的时候可以指定模式所属的用户,前提是要在有权限的system用户下创建。 dbtt=# create schema user007 authorization user01;

System用户可以使用任何模式,但是其他用户只能使用属于自己的模式创建对象。

(6)再次创建test数据库 报错说test表已经存在。

(7)在刚才创建的模式下进行创建test表

(8)查询创建的两个同名的test表

dbtt=# \d--默认只查看public模式下的表dbtt=# \d new_sch1.* -- 查询指定模式下的表

结论:数据库是被模式分割的,一个数据库至少有一个模式,数据库内部的所有对象都是在模式下被创建的,所以在同一个数据库不同的模式下可以出现同名的表。

4.表与模式的关系

  • 可以理解为数据库内的每一个表都是在某个模式下建立的。
  • 在同一个数据库内不同的模式下可以创建同名的表。

更多信息,参见https://help.kingbase.com.cn/v8/index.html