KingbaseES 的角色和权限管理

news/2024/12/2 22:41:56/

KingbaseES使用角色的概念管理数据库访问权限。为了方便权限管理,用户可以建立多个角色,对角色进行授权和权限回收,并把角色授予其他用户。
数据库初始化时,会创建一个超级用户的角色:system(默认,可修改)。
任何操作都是从该用户开始的。

创建角色

CREATE ROLE name [ [ WITH ] option [ ... ] ]
where option可以是:SUPERUSER | NOSUPERUSER      :超级权限,拥有所有权限,默认nosuperuser。
| CREATEDB | NOCREATEDB        :建库权限,默认nocreatedb。
| CREATEROLE | NOCREATEROLE    :建角色权限,拥有创建、修改、删除角色,默认nocreaterole。
| INHERIT | NOINHERIT          :继承权限,新角色是否继承其他角色的权限,默认inherit。
| LOGIN | NOLOGIN              :登录权限,默认nologin。
| REPLICATION | NOREPLICATION  :复制权限,用于物理或则逻辑复制(复制和删除slots),默认是noreplication。
| BYPASSRLS | NOBYPASSRLS      :安全策略RLS权限,角色是否可以绕过每一条行级安全性(RLS)策略,默认nobypassrls。
| CONNECTION LIMIT connlimit   :限制用户并发数,默认-1,不限制。正常连接会受限制,后台连接和prepared事务不受限制。
| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL :设置密码,密码仅用于有login属性的用户,不使用密码身份验证,则可以省略此选项。可以选择将空密码显式写为PASSWORD NULL。加密方法由配置参数password_encryption确定,密码始终以加密方式存储在系统目录中。
| VALID UNTIL 'timestamp'      :密码有效期时间,不设置则用不失效。
| IN ROLE role_name [, ...]    :新角色将立即添加为新成员。
| IN GROUP role_name [, ...]   :同上
| ROLE role_name [, ...]       :ROLE子句列出一个或多个现有角色,这些角色自动添加为新角色的成员。 (这实际上使新角色成为“组”)。
| ADMIN role_name [, ...]      :与ROLE类似,但命名角色将添加到新角色WITH ADMIN OPTION,使他们有权将此角色的成员资格授予其他人。
| USER role_name [, ...]       :同上
| SYSID uid                    :被忽略,但是为向后兼容性而存在。
创建不需要密码登陆的用户u1
test=# CREATE ROLE u1 LOGIN;
CREATE ROLE
等效于create user u1;创建需要密码登陆的用户u2
test=# CREATE USER u2 WITH PASSWORD '123456';
CREATE ROLE创建有时间限制的用户u3
test=# CREATE ROLE u3 WITH LOGIN PASSWORD '123456' VALID UNTIL '2023-03-30';
CREATE ROLE
该用户会在密码过期后不可用。创建具有超级权限的用户admin
test=# CREATE ROLE admin WITH SUPERUSER LOGIN PASSWORD 'admin';
CREATE ROLE

权限
KingbaseES权限分为两部分,一部分是“系统权限”或者数据库用户的属性,可以授予role或user(两者区别在于login权限);一部分为数据库对象上的操作权限。
一个角色可以继承父角色关于对象上的操作权限,但是无法继承父角色的系统权限(属性)。
在KingbaseES中角色属性login,superuser和createdb,createrole 权限无法被成员继承。

对象权限包括:

权限缩写授权目标类型
SELECTr (“read”)LARGE OBJECT, SEQUENCE, TABLE (and table-like objects), table column
INSERTa (“append”)TABLE, table column
UPDATEw (“write”)LARGE OBJECT, SEQUENCE, TABLE, table column
DELETEdTABLE
TRUNCATEDTABLE
REFERENCESxTABLE, table column
TRIGGERtTABLE
CREATECDATABASE, SCHEMA, TABLESPACE
CONNECTcDATABASE
TEMPORARYTDATABASE
EXECUTEXFUNCTION, PROCEDURE
USAGEUDOMAIN, FOREIGN DATA WRAPPER, FOREIGN SERVER, LANGUAGE, SCHEMA, SEQUENCE, TYPE

对数据库对象的各类操作的权限,通过GRANT手动授予;
在information_schema.xxx_privileges表中可查看,比如information_schema.table_privileges(在oracle模式中也可以通过oracle的兼容视图查询权限dba_xxx_privs等)

授权

-- 授予权限
GRANT {权限} ON {授权目标} TO {被授权角色} [WITH GRANT OPTION]
-- 授予角色
GRATE {角色} TO {被授权角色} [WITH ADMIN OPTION]
  • WITH GRANT OPTION:表示被授权人能够将该权限授予其他人,不能对PUBLIC使用该选项。
  • WITH ADMIN OPTION:授权传递,被授权的角色,可以传递授权

撤消权限

-- 取消权限
REVOKE [GRANT OPTION FOR] {权限} ON {授权目标} FROM {被授权人} [CASCADE | RESTRICT]
-- 取消角色
REVOKE [ADMIN OPTION FOR] {角色} FROM {被授权角色} [CASCADE | RESTRICT]
  • GRANT OPTION FOR:取消权限的授予权限,而不是权限本身;没有这一项就同时取消权限和授权权限
  • CASCADE:递归取消,适用于带有授权选项的用户将权限授予了其它用户,带上它则会将这些权限递归取消
  • RESTRICT:区别于CASCADE,不会递归取消,这是默认选项

测试验证

test=# create role admin password 'admin';
CREATE ROLE
test=# create user u1 password 'u1';
CREATE ROLE
test=# \du角色列表角色名称 |                    属性                    | 成员属于 
----------+--------------------------------------------+----------admin    | 无法登录                                   | {}sao      | 没有继承                                   | {}sso      | 没有继承                                   | {}system   | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}u1       |                                            | {}可以看到通过create role 创建的admin用户没有登录权限。将特殊权限createdb createrole赋权给admin角色,并将admin角色赋予u1用户
test=# alter role admin createdb createrole; 
ALTER ROLE
test=# grant admin to u1;
GRANT ROLEtest=# \du角色列表角色名称 |                    属性                    | 成员属于 
----------+--------------------------------------------+----------admin    | 建立角色, 建立 DB, 无法登录                | {}sao      | 没有继承                                   | {}sso      | 没有继承                                   | {}system   | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}u1       |                                            | {admin}test=# select rolname,rolcreaterole,rolcreatedb  from sys_roles where rolname in ('admin','u1');rolname | rolcreaterole | rolcreatedb 
---------+---------------+-------------u1      | f             | fadmin   | t             | t
(2 行记录)可以看到,u1已经是admin的成员,特殊权限createdb createrole 并没有被继承。test=# create table trole(id int,name varchar);
CREATE TABLE
test=# grant all on trole to admin;
GRANT
test=# \c - u1
您现在已经连接到数据库 "test",用户 "u1".
test=> insert into trole values (1,'a');
INSERT 0 1
test=> \c - u2
您现在已经连接到数据库 "test",用户 "u2".
test=> insert into trole values (1,'a');
错误:  对表 trole 权限不够将表trole的权限赋给admin后,用户u1可以作为admin的成员可以继承admin对trole表的所有权限。

成员用户可以通过set role 语法来获取父角色的系统权限

test=> \c - u1
您现在已经连接到数据库 "test",用户 "u1".
test=> set role admin;
SET
test=> create role u1c with password 'u1c';
CREATE ROLE
test=> \c - u2
您现在已经连接到数据库 "test",用户 "u2".
test=> set role admin;                     
错误:  设置角色"admin"的权限不足

成员用户可以通过set role来临时获取父角色的所有权限,在安全上存在一定的风险,尽量不用具有特殊权限的角色作为父角色


http://www.ppmy.cn/news/64213.html

相关文章

洗地机怎么选?高性价比家用洗地机推荐

洗地机是一款高效、智能的清洁设备,可轻松去除地面污渍,免除了传统清洁方式的繁琐和费时。采用高科技材料和技术,可快速有效地将地面污物清除,保持环境卫生和清爽。但是面对市场上众多的洗地机品牌,许多家人们都不知道…

手敲Mybatis(十)-完善ORM框架支持增删改查

我们把基本的功能都完成了,解析xml、构建映射代理、执行sql,解析处理结果,目前这些只支持查询,我们还差添加下增删改的功能,本章节就来完善下增删改,其实本章节比较简单,因为之前的每个章节都已…

KingbaseES 实现 MySQL 函数 last_insert_id

用户从mysql迁移到金仓数据库过程中,应用中使用了mysql函数last_insert_id()来获取最近insert的那行记录的自增字段值。 mysql文档中关于函数的说明和例子: LAST_INSERT_ID() 如果没有参数,则LAST_INSERT_ID()返回一个BIGINT UNSIGNED(64位)值…

Linux内核源码分析-进程调度(三)-从进程创建到唤醒的过程去了解CFS调度器

进程的创建是通过do_fork函数。新进程的诞生,我们调度核心层会通知调度类来初始化新进程。 我们一路顺着do_fork函数往下看:do_fork()->_do_fork()->copy_process()->sched_fork()。 long do_fork(unsigned long clone_flags, // 创建进程的标…

八岁都能懂:O(N)条件下在N个元素中找出第K小的元素

目录 1 进入情境1-1 金字塔道具1-2 感觉还不够1-3 万能筛子1-4 怎么用呢 2 代码实现2-1 伪代码描述2-2 完整实例c 3 引申3-1 完美的折半舍弃3-2 找出前K小的元素(topK方法)3-3 O(n)效率下求中位数参考资料 1 进入情境 生日,朋友送了一堆弹珠,…

API Design principle 一些API设计原则

API(应用程序编程接口)是一种规范,定义了不同软件组件之间如何进行交互。API 描述了一组操作、输入和输出,这些操作独立于实现,使得开发人员可以访问其他程序、库或框架的功能,而无需了解其底层实现细节。A…

【论文笔记】Attention和Visual Transformer

Attention和Visual Transformer Attention和Transformer为什么需要AttentionAttention机制Multi-head AttentionSelf Multi-head Attention,SMA TransformerVisual Transformer,ViT Attention和Transformer Attention机制在相当早的时间就已经被提出了&…

VUE 学习笔记(二)VUE的深入理解

一、VUE 简介 1.什么是VUE ? VUE 是一套用于构建用户界面的渐进式JavaScript框架 ,对于简单应用,只需要轻量小巧的核心库,对于复杂的应用,可以引入各种VUE 插件。 模板引擎是 Vue 里最主要、最核心的一个能力,在模板引…