一位老司机 发表于 2025-4-19 14:01:04

人大金仓KCA | 对象访问权限入门

人大金仓KCA | 对象访问权限入门

一、知识预备
1. 对象的分类 2. 对象访问权限概述 3. 级联授权 4. 权限描述符 5. 使用EasyKStudio查看用户权限
二、案例实施
1. 用户授权综合案例 2. 对象的创建者默认就是对象的所属主 3. 该表对象的所属主 4. 对象属主的权限设置 5. 授权普通用户访问对象 6. public角色


OS版本:CentOS-7-x86_64-Everything-2009
KES版本:KingbaseES_V008R006C008B0014_Lin64
许可证版本:license_39893_0.dat(开发版)
一、知识预备

1. 对象的分类

数据库的表、索引、视图、缺省值、规则、触发器等都称为数据库对象,对象分为两类:
模式对象:可以理解为一个存储目录,包含视图、索引、数据类型、函数和操作符等 非模式对象:其它的数据库对象,如数据库、表空间、用户
2. 对象访问权限概述

对象都会有一个所有者,所有者一般是对象的创建者,所有者也可以被改变,类似于Linux中的文件权限。 初始状态下,只有所有者和超级用户能够对该对象执行任何操作 其它用户和角色要使用该对象,必须显式的为其授予访问该对象的相关权限 不同的对象类型所支持权限类似是不一样的
3. 级联授权

数据库中的级联授权(Cascading Authorization)是一种权限传递机制,它允许一个用户(或角色)将其所拥有的权限授予另一个用户(或角色),并且这种授权关系可以逐级传递下去。



4. 权限描述符

在KES中制定了一种类似于Linux权限掩码的权限描述符,在查询相关对象的权限时,仅显式权限描述符,减少打印空间。
常见权限描述符
权限描述符完整单词针对对象说明aINSERT针对表或视图插入wUPDATE针对表或视图更新DTRUNCATE针对表清空记录tTRIGGER针对表创建触发器UUSAGE针对模式使用权cCONNECT针对数据库创建连接rSELECT针对表或视图查询dDELETE针对表或视图参照引用xREFERENCES针对表删除XEXECUTE针对存储过程执行CCREATE针对模式或数据库创建对象TTEMPORARY针对数据库创建临时表查看student表中各用户拥有的权限
\dp student

具体权限说明
system=arwdDxt/system+
语法格式:[ 被授权用户 ]=权限明细[ * ]/授权用户 system:代表被授权的用户 arwdDxt:具体权限明细 /system:被授权的用户 +:类似于间隔符
user01=ar*/system
user01:被授权的用户 ar:代表insert和select权限 r*:代表user01可以向其它用户授予select权限 /system:代表是system用户向user01用户授予的权限
5. 使用EasyKStudio查看用户权限

: 通过编辑用户,可以查看用户对数据库的权限
权限说明ALL授予所有权限CREATE允许创建表、模式、索引TEMPORARY允许创建临时表TEMP允许创建临时表CONNECT允许连接数据库

: 通过编辑用户,可以查看用户对模式的权限
权限说明ALL授予全部权限USAGE允许访问指定模式中的对象,如果是序列则允许使用currval和nextval函数CREATE允许在模式中创建对象

: 通过编辑用户,可以查看用户对指定表的权限
权限说明ALL授予全部权限SELECT授予读取权限INSERT授予插入权限UPDATE授予更新权限DELETE授予删除权限TRUNCATE允许对表进行截断清空REFERENCES允许创建外键约束TRIGGER允许在表上创建触发器

二、案例实施

1. 用户授权综合案例

使用 system 用户登录 test 数据库 创建 user01 用户,在public模式下创建 tb01 表 向 tb01 表中插入数据,授予 user01 用户可查询 tb01 表 授予 user01 用户拥有对 tb01 表的查询转授权限 授予 user01 用户可以在 tb01 表中插入数据
: 使用system用户登录test数据库
ksql -Usystem-dtest: 创建user01用户,新建tb01表
createuser user01 password 'kingbase';createtable tb01 (id int,name varchar(100));: 往tb01表中插入数据
insertinto tb01 values(1001,'Mike'),(1002,'Jack');: 授予user01用户查询和转授权限,授予user01用户插入权限
grantselectonpublic.tb01 to user01 withgrantoption;grantinsertonpublic.tb01 to user01;: 验证:查看tb01表中所有用户权限
\dp tb01

2. 对象的创建者默认就是对象的所属主

: 使用 system 用户创建 tb02 表
createtable tb02 (id int,name varchar(10));
\dt tb02

3. 该表对象的所属主

: 修改 tb02 的所属主为 user01
altertable tb02 owner to user01;
\dt tb02

4. 对象属主的权限设置

: 查看 user01 在tb02上的隐式权限
select*from information_schema.table_privileges
where table_catalog='test'and table_schema='public'and table_name='tb02';

: 属主的特殊权限不可被授予或移除
grantdropto tb02 to user01;grantgrantto tb02 to user01;grantrevoketo tb02 to user01;revokedropontable tb02 from user01;revokegrantontable tb02 from user01;revokerevokeontable tb02 from user01;

: 管理员和属主可以撤销所有者在表中普通权限
revokeselectontable tb02 from user01;

5. 授权普通用户访问对象

: 创建新用户 user03
createuser user03 password 'kingbase';: 授予用户访问数据库的权限
grantconnectondatabase test to user03;

: 授予用户访问模式的权限
grantusageonschemapublicto user03;

: 授予用户访问表的权限
grantselectontable db01 to user03;

: 验证:使用 tb01 用户登录
\c - user03
select*frompublic.tb01;

6. public角色

public角色默认拥有登录所有数据库、在public模式下创建对象的权限,默认情况下所有用户属于public角色。
: 查看public角色在test数据库、public模式中的权限
\l test
\dn+public

: 创建一个用户 pub_user,可以发现 pub_user 默认可以登录 test 数据库,可以在public模式中创建对象
createuser pub_user password 'kingbase';
\c - pub_user
createtable pub_tb (id int,name varchar(10));

: 回收 public 角色的所有默认权限
revokeallondatabase test frompublic;

: 验证:pub_user已经无法在test数据库中登录
\c - db_user
页: [1]
查看完整版本: 人大金仓KCA | 对象访问权限入门