在kingbase数据库中用户=角色
用户用于访问、管理数据库对象:表、索引、视图、存储过程等
角色用于管理数据库的访问权限
用户和角色针对的是整个数据库集簇,而不是针对某个单一的数据库,当权限足够大时,可以访问所有数据库任意对象。数据库在初始化时默认创建system超级管理员用户
用户和角色区别
user:默认拥有login登入数据库、创建对象的权限,而角色默认没有login的权限
role:可以拥有数据库的对象,例如表、索引等,也可以将这些对象权限其赋予给其它角色,以控制哪些用户对哪些对象拥有哪些权限
创建用户、角色并授权
create user test superuser password '123';
create user test1 createdb password '123';
create role test2 encrypted password '123' valid until '2024-03-29';

#login、superuser、create role被视为特殊权限,并不会像其它用户普通权限一样可以被继承
通过sys_user可以查看所有用户包含的权限

修改用户、角色权限
alter user test rename to test3;
alter user test1 createrole;
alter role test2 login;

#除管理员用户外,只有具备createrole权限的用户可以修改其它用户的名字
授予用户role的权限
在授予角色权限时,非默认角色需要授权完成后需要set role name 使之生效,但创建完成后数据库属主归属test1,当前用户也会默认切换到test1下
grant test1 to abc;
删除用户、角色
drop user test1;
drop role test2;
#超级用户可以删除超级用户,具有createrole权限的用户可以删除非超级用户以外的用户
#删除用户前需删除该用户依赖的对象、权限等
#删除组role时只会删除role角色本身,组成员并不会被删除
schema
初始化数据库时会自动创建一个公用的public模式,共享给所有用户,任何一个用户都可以在该模式下创建对象
一个用户可以创建或者拥有多个schema,但一个schema只能属于一个用户。普通用户创建模式需进行授权
grant create on database test to name1;
切换用户登入并创建schema
\c - name1
create schema name1;
其它用户访问该用户下的模式时,需将模式的访问权限授权给其它用户
![]()
搜索路径search_path ,如果在前面的变量中找到对象,则会放弃对后面模式的搜索
test=> show search_path;
search_path
-----------------
"$user", public
"$user", public:默认搜索和登入用户名一样的模式,若搜索不到则会搜索public
可临时修改search_path搜索路径进行查看,若public模式下存在同名表,则无法查看到abc模式下相同名字的表
![]()
查看所有表及对应模式
select a.relname,b.nspname from sys_class a,sys_namespace b where a.relnamespace=b.oid order by 1;






