KingbaseES 使用角色的概念管理数据库访问权限。为了方便权限管理,用户可以建立多个角色,对角色进行授权和权限回收,并把角色授予其他用户。

数据库初始化时,会创建一个超级用户的角色:system(默认,可修改)。

任何操作都是从该用户开始的。

创建角色

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

权限

KingbaseES权限分为两部分,一部分是“系统权限”或者数据库用户的属性,可以授予role或user(两者区别在于login权限);一部分为数据库对象上的操作权限。

一个角色可以继承父角色关于对象上的操作权限,但是无法继承父角色的系统权限(属性)。

在KingbaseES中角色属性login,superuser和createdb,createrole 权限无法被成员继承。

对象权限包括:

权限 缩写 授权目标类型
SELECT r (“read”) LARGE OBJECT, SEQUENCE, TABLE (and table-like objects), table column
INSERT a (“append”) TABLE, table column
UPDATE w (“write”) LARGE OBJECT, SEQUENCE, TABLE, table column
DELETE d TABLE
TRUNCATE D TABLE
REFERENCES x TABLE, table column
TRIGGER t TABLE
CREATE C DATABASE, SCHEMA, TABLESPACE
CONNECT c DATABASE
TEMPORARY T DATABASE
EXECUTE X FUNCTION, PROCEDURE
USAGE U DOMAIN, FOREIGN DATA WRAPPER, FOREIGN SERVER, LANGUAGE, SCHEMA, SEQUENCE, TYPE

对数据库对象的各类操作的权限,通过GRANT手动授予;

在information_schema.xxx_privileges表中可查看,比如information_schema.table_privileges(在oracle模式中也可以通过oracle的兼容视图查询权限dba_xxx_privs等)

授权

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

撤消权限

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

测试验证

  1. test=# create role admin password 'admin';
  2. CREATE ROLE
  3. test=# create user u1 password 'u1';
  4. CREATE ROLE
  5. test=# \du
  6. 角色列表
  7. 角色名称 | 属性 | 成员属于
  8. ----------+--------------------------------------------+----------
  9. admin | 无法登录 | {}
  10. sao | 没有继承 | {}
  11. sso | 没有继承 | {}
  12. system | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
  13. u1 | | {}
  14. 可以看到通过create role 创建的admin用户没有登录权限。
  15. 将特殊权限createdb createrole赋权给admin角色,并将admin角色赋予u1用户
  16. test=# alter role admin createdb createrole;
  17. ALTER ROLE
  18. test=# grant admin to u1;
  19. GRANT ROLE
  20. test=# \du
  21. 角色列表
  22. 角色名称 | 属性 | 成员属于
  23. ----------+--------------------------------------------+----------
  24. admin | 建立角色, 建立 DB, 无法登录 | {}
  25. sao | 没有继承 | {}
  26. sso | 没有继承 | {}
  27. system | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
  28. u1 | | {admin}
  29. test=# select rolname,rolcreaterole,rolcreatedb from sys_roles where rolname in ('admin','u1');
  30. rolname | rolcreaterole | rolcreatedb
  31. ---------+---------------+-------------
  32. u1 | f | f
  33. admin | t | t
  34. (2 行记录)
  35. 可以看到,u1已经是admin的成员,特殊权限createdb createrole 并没有被继承。
  36. test=# create table trole(id int,name varchar);
  37. CREATE TABLE
  38. test=# grant all on trole to admin;
  39. GRANT
  40. test=# \c - u1
  41. 您现在已经连接到数据库 "test",用户 "u1".
  42. test=> insert into trole values (1,'a');
  43. INSERT 0 1
  44. test=> \c - u2
  45. 您现在已经连接到数据库 "test",用户 "u2".
  46. test=> insert into trole values (1,'a');
  47. 错误: 对表 trole 权限不够
  48. 将表trole的权限赋给admin后,用户u1可以作为admin的成员可以继承admintrole表的所有权限。

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

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

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

KingbaseES角色和权限介绍的更多相关文章

  1. ASP.NET MVC 基于角色的权限控制系统的示例教程

    上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...

  2. oracle角色、权限和用户

    oracle角色.权限和用户 [转贴 2010-1-25 10:29:45]     字号:大 中 小 Oracle内置角色connect与resource的权限 首先用一个命令赋予user用户con ...

  3. Oracle 用户,角色,权限等

    权限管理是 Oracle 系统的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限.Oracle 的权限分为系统权限和数据对象权限,共一百多种,如果单独对用户授权,很囧,有一些用户 ...

  4. webapi框架搭建-安全机制(三)-简单的基于角色的权限控制

    webapi框架搭建系列博客 上一篇已经完成了“身份验证”,如果只是想简单的实现基于角色的权限管理,我们基本上不用写代码,微软已经提供了authorize特性,直接用就行. Authorize特性的使 ...

  5. 【视频分享】Liger UI实战集智建筑project管理系统配商业代码(打印报表、角色式权限管理)

    QQ 2059055336 课程讲师:集思博智 课程分类:.net 适合人群:中级 课时数量:23课时 用到技术:Liger UI框架.AJAX.JSON数据格式的序列化与反序列化.角色的交叉权限管理 ...

  6. RBAC基于角色的权限访问控制

      RBAC是什么,能解决什么难题?ThinkPHP中RBAC实现体系安全拦截器认证管理器访问决策管理运行身份管理器ThinkPHP中RBAC认证流程权限管理的具体实现过程RBAC相关的数据库介绍Th ...

  7. 图文详解基于角色的权限控制模型RBAC

    我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问.操作.数据权限.形成理论的权限控制模型有:自主访问控制(DAC: Discretionary Access Control).强制 ...

  8. oracle管理角色和权限

    介绍 这一部分主要看看oracle中如何管理权限和角色,权限和角色的区别在哪里. 当刚刚建立用户时,用户没有任何权限,也不能执行任何操作.如果要执行某种特定的数据库操作,则必需为其授予系统的权限:如果 ...

  9. MySQL角色(role)功能介绍

    前言: 上篇文章,我们介绍了 MySQL 权限管理相关知识.当数据库实例中存在大量的库或用户时,权限管理将会变得越来越繁琐,可能要频繁进行权限变更.MySQL 8.0 新增了 role 功能,使得权限 ...

  10. rbac-基于角色的权限控制系统(8种常用场景再现)

    首先要抛出的问题是在代码世界里什么是权限? url就代表权限 如何实现权限控制? 下面详细介绍控制流程 1.1简单权限控制--表结构 简单权限控制,三个model,五张表 权限表permission ...

随机推荐

  1. LAMP环境部署wordpress

    关于搭建LAMP 请参考:https://blog.csdn.net/IndexMan/article/details/122991129 本篇是基于LAMP环境搭建wordpress. 上传word ...

  2. spring boot携手echarts实现双柱状图实战

    说明 最近做了个图书管理系统,里面有个模块是统计最近一周借书和还书的情况. 设计为柱状图模式展现,自然需要用到echarts. 实现效果 开发步骤 1.页面和JS <!DOCTYPE html& ...

  3. Execl常用快捷操作

    常用的操作 Ctrl+A 全选 Ctrl+Z 撤销 Ctrl+X 剪切 Ctrl+C 复制 Ctrl+V 粘贴 Ctrl+B 加粗 Ctrl+S 保存 Ctrl+F 查找 Ctrl+H 替换 Alt+ ...

  4. select_for_update悲观锁

    例子,银行存款和撤销方法 1.用户A提取帐户 - 余额为100 $. 2.用户B提取帐户 - 余额为100 $. 3.用户B退出30 $ - 余额更新为100 $ - 30 $ = 70 $. 4.用 ...

  5. Elasticsearch系列之-linux.docker安装和基础操作及在Django中集成

    elasticsearch Elasticsearch是一个基于Lucene的搜索服务器,也是属于NoSQL阵营的数据库.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口提供 ...

  6. canal实现mysql跨机房备份

    背景介绍 跨机房数据库数据备份 数据库增量异构系统分发(cache,mq等) 数据内容聚合分析组件 摘录作者的描述 原理图 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL ...

  7. 【Azure Key Vault】是否有直接方法将Azure Key Vault中的机密名称/机密值到处成文件呢?

    问题描述 是否有直接方法将Azure Key Vault中的机密名称/机密值导出,保存为一个文件呢? 问题解答 Azure Key Vault 没有直接提供Secret 导出文件(如xlsx格式)的方 ...

  8. C笔记(2014-12备份)

    Video1: 1-编译器对待全局变量和局部变量的差别.全局变量分配空间是在数据区,局部变量分配在代码区. (比如局部变量 int lo_var = 2;后面的 = 2;是赋值语句,被编译器转化成机器 ...

  9. DataX 离线跨网场景的实施配置

    配置仅限于跨不同网情况,网络互通情况方案和配置会更简单一点 内网A:MySql数据转换成Csv { "job": { "setting": { "sp ...

  10. 从源码看webpack3打包流程

    在javascript刚刚流行时,前端项目通常比较简单,不需要考虑项目的开发效率.性能和扩展性等. 随着前端项目越来越复杂,需要更正式的软件开发实践,比如单元测试(unit testing).代码检查 ...