未登录

信蚁社区 通行证

搜索
热搜: 统信UOS 麒麟
查看: 81|回复: 0

[金仓数据库] 人大金仓KCA | 对象访问权限入门

[复制链接]

103

主题

4

回帖

339

积分

实习版主

Rank: 7Rank: 7Rank: 7Rank: 7

积分
339

最佳新人灌水之王优秀版主

发表于 2025-4-19 14:01:04 | 显示全部楼层 |阅读模式
人大金仓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)是一种权限传递机制,它允许一个用户(或角色)将其所拥有的权限授予另一个用户(或角色),并且这种授权关系可以逐级传递下去。

人大金仓KCA | 对象访问权限入门-1.png


4. 权限描述符

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


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

[Step1]: 通过编辑用户,可以查看用户对数据库的权限
权限说明
ALL授予所有权限
CREATE允许创建表、模式、索引
TEMPORARY允许创建临时表
TEMP允许创建临时表
CONNECT允许连接数据库
人大金仓KCA | 对象访问权限入门-3.png


[Step2]: 通过编辑用户,可以查看用户对模式的权限
权限说明
ALL授予全部权限
USAGE允许访问指定模式中的对象,如果是序列则允许使用currval和nextval函数
CREATE允许在模式中创建对象
人大金仓KCA | 对象访问权限入门-4.png


[Step3]: 通过编辑用户,可以查看用户对指定表的权限
权限说明
ALL授予全部权限
SELECT授予读取权限
INSERT授予插入权限
UPDATE授予更新权限
DELETE授予删除权限
TRUNCATE允许对表进行截断清空
REFERENCES允许创建外键约束
TRIGGER允许在表上创建触发器
人大金仓KCA | 对象访问权限入门-5.png


二、案例实施

1. 用户授权综合案例

    使用 system 用户登录 test 数据库 创建 user01 用户,在public模式下创建 tb01 表 向 tb01 表中插入数据,授予 user01 用户可查询 tb01 表 授予 user01 用户拥有对 tb01 表的查询转授权限 授予 user01 用户可以在 tb01 表中插入数据
[Step1]: 使用system用户登录test数据库
  1. ksql -Usystem-dtest
复制代码
[Step2]: 创建user01用户,新建tb01表
  1. createuser user01 password 'kingbase';createtable tb01 (id int,name varchar(100));
复制代码
[Step3]: 往tb01表中插入数据
  1. insertinto tb01 values(1001,'Mike'),(1002,'Jack');
复制代码
[Step4]: 授予user01用户查询和转授权限,授予user01用户插入权限
  1. grantselectonpublic.tb01 to user01 withgrantoption;grantinsertonpublic.tb01 to user01;
复制代码
[Step5]: 验证:查看tb01表中所有用户权限
  1. \dp tb01
复制代码
人大金仓KCA | 对象访问权限入门-6.png


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

[Step1]: 使用 system 用户创建 tb02 表
  1. createtable tb02 (id int,name varchar(10));
  2. \dt tb02
复制代码
人大金仓KCA | 对象访问权限入门-7.png


3. 该表对象的所属主

[Step1]: 修改 tb02 的所属主为 user01
  1. altertable tb02 owner to user01;
  2. \dt tb02
复制代码
人大金仓KCA | 对象访问权限入门-8.png


4. 对象属主的权限设置

[Step1]: 查看 user01 在tb02上的隐式权限
  1. select*from information_schema.table_privileges
  2. where table_catalog='test'and table_schema='public'and table_name='tb02';
复制代码
人大金仓KCA | 对象访问权限入门-9.png


[Step2]: 属主的特殊权限不可被授予或移除
  1. grantdropto tb02 to user01;grantgrantto tb02 to user01;grantrevoketo tb02 to user01;revokedropontable tb02 from user01;revokegrantontable tb02 from user01;revokerevokeontable tb02 from user01;
复制代码
人大金仓KCA | 对象访问权限入门-10.png


[Step3]: 管理员和属主可以撤销所有者在表中普通权限
  1. revokeselectontable tb02 from user01;
复制代码
人大金仓KCA | 对象访问权限入门-11.png


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

[Step1]: 创建新用户 user03
  1. createuser user03 password 'kingbase';
复制代码
[Step2]: 授予用户访问数据库的权限
  1. grantconnectondatabase test to user03;
复制代码
人大金仓KCA | 对象访问权限入门-12.png


[Step2]: 授予用户访问模式的权限
  1. grantusageonschemapublicto user03;
复制代码
人大金仓KCA | 对象访问权限入门-13.png


[Step3]: 授予用户访问表的权限
  1. grantselectontable db01 to user03;
复制代码
人大金仓KCA | 对象访问权限入门-14.png


[Step4]: 验证:使用 tb01 用户登录
  1. \c - user03
  2. select*frompublic.tb01;
复制代码
人大金仓KCA | 对象访问权限入门-15.png


6. public角色

public角色默认拥有登录所有数据库、在public模式下创建对象的权限,默认情况下所有用户属于public角色。
[Step1]: 查看public角色在test数据库、public模式中的权限
  1. \l test
  2. \dn+public
复制代码
人大金仓KCA | 对象访问权限入门-16.png


[Step2]: 创建一个用户 pub_user,可以发现 pub_user 默认可以登录 test 数据库,可以在public模式中创建对象
  1. createuser pub_user password 'kingbase';
  2. \c - pub_user
  3. createtable pub_tb (id int,name varchar(10));
复制代码
人大金仓KCA | 对象访问权限入门-17.png


[Step3]: 回收 public 角色的所有默认权限
  1. revokeallondatabase test frompublic;
复制代码
人大金仓KCA | 对象访问权限入门-18.png


[Step4]: 验证:pub_user已经无法在test数据库中登录
  1. \c - db_user
复制代码
人大金仓KCA | 对象访问权限入门-19.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表