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

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查看用户权限

[Step1]: 通过编辑用户,可以查看用户对数据库的权限

权限说明
ALL授予所有权限
CREATE允许创建表、模式、索引
TEMPORARY允许创建临时表
TEMP允许创建临时表
CONNECT允许连接数据库

在这里插入图片描述

[Step2]: 通过编辑用户,可以查看用户对模式的权限

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

在这里插入图片描述

[Step3]: 通过编辑用户,可以查看用户对指定表的权限

权限说明
ALL授予全部权限
SELECT授予读取权限
INSERT授予插入权限
UPDATE授予更新权限
DELETE授予删除权限
TRUNCATE允许对表进行截断清空
REFERENCES允许创建外键约束
TRIGGER允许在表上创建触发器

在这里插入图片描述

二、案例实施

1. 用户授权综合案例

  • 使用 system 用户登录 test 数据库
  • 创建 user01 用户,在public模式下创建 tb01 表
  • 向 tb01 表中插入数据,授予 user01 用户可查询 tb01 表
  • 授予 user01 用户拥有对 tb01 表的查询转授权限
  • 授予 user01 用户可以在 tb01 表中插入数据

[Step1]: 使用system用户登录test数据库

ksql -Usystem -d test

[Step2]: 创建user01用户,新建tb01表

create user user01 password 'kingbase';
create table tb01 (id int,name varchar(100));

[Step3]: 往tb01表中插入数据

insert into tb01 values(1001,'Mike'),(1002,'Jack');

[Step4]: 授予user01用户查询和转授权限,授予user01用户插入权限

grant select on public.tb01 to user01 with grant option;
grant insert on public.tb01 to user01;

[Step5]: 验证:查看tb01表中所有用户权限

\dp tb01

在这里插入图片描述

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

[Step1]: 使用 system 用户创建 tb02 表

create table tb02 (id int,name varchar(10));
\dt tb02

在这里插入图片描述

3. 该表对象的所属主

[Step1]: 修改 tb02 的所属主为 user01

alter table tb02 owner to user01;
\dt tb02

在这里插入图片描述

4. 对象属主的权限设置

[Step1]: 查看 user01 在tb02上的隐式权限

select * from information_schema.table_privileges
where table_catalog='test'
and table_schema='public'
and table_name='tb02';

在这里插入图片描述

[Step2]: 属主的特殊权限不可被授予或移除

grant drop to tb02 to user01;
grant grant to tb02 to user01;
grant revoke to tb02 to user01;
revoke drop on table tb02 from user01;
revoke grant on table tb02 from user01;
revoke revoke on table tb02 from user01;

在这里插入图片描述

[Step3]: 管理员和属主可以撤销所有者在表中普通权限

revoke select on table tb02 from user01;

在这里插入图片描述

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

[Step1]: 创建新用户 user03

create user user03 password 'kingbase';

[Step2]: 授予用户访问数据库的权限

grant connect on database test to user03;

在这里插入图片描述

[Step2]: 授予用户访问模式的权限

grant usage on schema public to user03;

在这里插入图片描述

[Step3]: 授予用户访问表的权限

grant select on table db01 to user03;

在这里插入图片描述

[Step4]: 验证:使用 tb01 用户登录

\c - user03
select * from public.tb01;

在这里插入图片描述

6. public角色

public角色默认拥有登录所有数据库、在public模式下创建对象的权限,默认情况下所有用户属于public角色。

[Step1]: 查看public角色在test数据库、public模式中的权限

\l test
\dn+ public

在这里插入图片描述

[Step2]: 创建一个用户 pub_user,可以发现 pub_user 默认可以登录 test 数据库,可以在public模式中创建对象

create user pub_user password 'kingbase';
\c - pub_user
create table pub_tb (id int,name varchar(10));

在这里插入图片描述

[Step3]: 回收 public 角色的所有默认权限

revoke all on database test from public;

在这里插入图片描述

[Step4]: 验证:pub_user已经无法在test数据库中登录

\c - db_user

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meaauf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值