KingbaseES 数据库中不同user的视图访问授权
前言
本文的目的是实现u1用户访问ud用户下的视图权限。
测试
登录system用户并创建schema,user,并授权schema的有关权限给ud用户
TEST=# select current_user;
 current_user
--------------
 system
(1 row)
TEST=# create schema ud;
CREATE SCHEMA
TEST=#
TEST=# create user ud;
CREATE ROLE
TEST=# grant usage on schema ud to ud;
GRANT
TEST=#
TEST=# grant select ON ALL TABLES IN SCHEMA ud to ud;
GRANT
TEST=# grant create on schema ud to ud;
GRANT
登录ud用户并执行命令
TEST=# \c - ud
You are now connected to database "TEST" as user "ud".
TEST=> create table ti (id int);
CREATE TABLE
TEST=> insert into ti values(1);
INSERT 0 1
TEST=>
TEST=> select * from ti;
 id
----
  1
(1 row)
TEST=> create  view view_tu as select * from ti;
CREATE VIEW
TEST=>
TEST=> select * from view_tu;
 id
----
  1
(1 row)
登录system用户,创建role01并把视图的查询权限赋给role01
TEST=> \c - system
You are now connected to database "TEST" as user "system".
TEST=#
TEST=#
TEST=# create role role01;
CREATE ROLE
TEST=# grant select on ud.view_tu to role01;
GRANT
把role01角色赋给u1用户
TEST=# grant role01 to u1;
GRANT ROLE
TEST=#
TEST=# \du
                                    List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+------------
 ab        |                                                            | {ceshi001}
 ceshi001  | Cannot login                                               | {}
 manager   | Cannot login                                               | {}
 role01    | Cannot login                                               | {}
 sao       | No inheritance                                             | {}
 sso       | No inheritance                                             | {}
 system    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 u1        |                                                            | {role01}
 ud        |                                                            | {role01}
登录u1用户,查询schema ud下的视图,报错权限不足
TEST=# \c - u1;
You are now connected to database "TEST" as user "u1".
TEST=>
TEST=> select * from ud.view_tu;
ERROR:  permission denied for schema ud
LINE 1: select * from ud.view_tu;
                      ^
登录system用户并把schema ud 的权限赋给u1
TEST=> \c - system
You are now connected to database "TEST" as user "system".
TEST=#
TEST=#
TEST=# grant all privileges on schema ud to u1;
GRANT
TEST=#
登录u1用户,授权后可以查询schema ud的视图
TEST=# \c - u1
You are now connected to database "TEST" as user "u1".
TEST=>
TEST=> select * from ud.view_tu;
 id
----
  1
(1 row)
总结
如下,我们看到角色role01有视图view_tu的查询权限
                             Access privileges
 Schema |  Name   | Type | Access privileges | Column privileges | Policies
--------+---------+------+-------------------+-------------------+----------
 ud     | view_tu | view | ud=arwdDxt/ud    +|                   |
        |         |      | role01=r/ud       |                   |
(1 row)
如下,我们看到u1用户拥有角色role01的权限
TEST=> \du
                                    List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+------------
 ab        |                                                            | {ceshi001}
 ceshi001  | Cannot login                                               | {}
 manager   | Cannot login                                               | {}
 role01    | Cannot login                                               | {}
 sao       | No inheritance                                             | {}
 sso       | No inheritance                                             | {}
 system    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 u1        |                                                            | {role01}
 ud        |                                                            | {role01}
因为前面执行过一个授权语句:grant all privileges on schema ud to u1;
根据以下sql查询权限得知u1拥有了在schema ud的USAGE和CREATE权限
select a.nspname,b.rolname,string_agg(a.pri_t,',') from
(select nspname,(aclexplode(COALESCE(nspacl, acldefault('n'::"char",nspowner)))).grantee as grantee,
(aclexplode(COALESCE(nspacl, acldefault('n'::"char",nspowner)))).privilege_type as pri_t
from pg_namespace where nspname not like 'pg%' and nspname <> 'information_schema') a,pg_authid b
where (a.grantee=b.oid or a.grantee=0) and b.rolname='u1' group by a.nspname,b.rolname;
   nspname   | rolname |  string_agg
-------------+---------+--------------
 public      | u1      | USAGE,CREATE
 sys         | u1      | USAGE
 sys_catalog | u1      | USAGE
 sysaudit    | u1      | USAGE,CREATE
 sysmac      | u1      | USAGE
 ud          | u1      | USAGE,CREATE
(6 rows)
经过以上的授权步骤我们可以看出,如果要实现u1用户对ud用户下视图的查询权限需要经过一些列复杂的授权过程。
尤其需要注意u1对schema ud的有关权限,否则即使拥有角色role01的查询权限也无法查看其他schema下视图。
												
											KingbaseES 数据库中不同user的视图访问授权的更多相关文章
- 查看SQL Server数据库中各个表和视图的索引所占的空间大小
		
;with cte as ( (select t.name as TableName,i.name as IndexName, sum(row_count)as row_count, SUM (s.u ...
 - sqlserver2008 数据库中查询存储过程的的创建修改和执行时间,以及比较常见的系统视图和存储过程
		
因为各种原因数据库中存在大量无用的存储过程,想查询存储过程的最后执行情况,处理长期不使用的存储过程 下面这条语句可以查询存储过程创建 修改和执行的最后时间: SELECT a.name AS 存储过程 ...
 - KingbaseES数据库目录结构
		
KingbaseES数据库目录结构 [kingbase@postgres V8]$ tree -LP 2 data/ . ├── data │ ├── base # 存储用户创建的数据库文件及隶属于用 ...
 - SQlServer 从系统表 sysobjects 中获取数据库中所有表或存储过程等对象
		
[sysobjects] 一.概述 系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等,该表中包含该数据库中的表 存储过程 视图等所有对象 在sqlserver2005,sql ...
 - 如何将数据库中已有表导入到powerDesigner生成pdm文件
		
1.create new PDM: 2.select database menu; 3.click Reverse Engineer database :4.then choose your scr ...
 - 查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数
		
查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06| 分类: SQL SERVER|举报|字号 订阅 ( ...
 - 数据库中树形列表(以easyui的tree为例)
		
构造一棵easyui前台框架的一个树形列表为例后台框架是spring MVC+JPA. 先看一下数据库是怎么建的,怎么存放的数据 下面是实体类 /** * 部门类 用户所属部门(这里的部门是一个相对抽 ...
 - 批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor
		
批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor2.1.11 之前写过一篇文章,使用redgate公司的SQL PROMPT工具,但是不太方便 SQLPRO ...
 - XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo
		
本主题介绍如何启用管理模型差异(XAFML),并将设置存储在数据库中. 名词解释: 1.模型:XAF中把所有应用程序的结构都用模型来定义,比如列表,有哪些列,名称是什么,对应的字段名是什么,业务对 ...
 - Oracle数据库中SYS、SYSTEM、DBSNMP、SYSMAN四用户的区别
		
[转] SYS.SYSTEM.DBSNMP. Oracle 数据库中 SYS.SYSTEM.DBSNMP.SYSMAN 四用户的区别 用户: SYS 用户: SYS,默认密码为 CHANGE_ON ...
 
随机推荐
- 【C#】基于JsonConvert解析Json数据
			
1 解析字典  1)解析为 JObject private void ParseJson() { // 解析为JObject string jsonStr = "{'name': 'zha ...
 - cdn缓存立刻刷新
			
现在例如有一个业务需求是客户更新图片,那我们需要及时更新,可是正常的上传是无法及时更新的,因为七牛云会有客户端缓存和cdn缓存,这时候可能有多种处理方式: 1.cdn和客户端缓存的时间调短,例如1 ...
 - 如何快速使用LayUI MINI框架
			
是什么 LayUI MINI是基于LayUI框架开发的一套最简洁.易用的后台框架模板,它已经是一个非常完整的脚手架,有现成的页面模板可以参考甚至是直接使用. 通常来说,如果我们准备开发一套管理系统的W ...
 - Python函数每日一讲 - 一文让你彻底掌握Python中的frozenset函数
			
引言 在 Python 中,frozenset() 函数是一个重要的工具,用于创建不可变的集合对象.本文将介绍 frozenset() 函数的语法.用法示例以及实际应用场景,帮助大家更好地理解和应用这 ...
 - Emqx高可用架构
			
目录 优化前架构 主要问题 haproxy问题 优化后架构 优化功能点 emq版本升级 linux系统调优 haproxy调优 测试工具 依赖安装 配置erl环境变量 安装压测软件 测试指令与结果展示 ...
 - 使用秘籍|如何实现图数据库 NebulaGraph 的高效建模、快速导入、性能优化
			
本文整理自 NebulaGraph PD 方扬在「NebulaGraph x KubeBlocks」meetup 上的演讲,主要包括以下内容: NebulaGraph 3.x 发展历程 NebulaG ...
 - 图查询语言 nGQL 简明教程 vol.01 快速入门
			
本文旨在让新手快速了解 nGQL,掌握方向,之后可以脚踩在地上借助文档写出任何心中的 NebulaGraph 图查询. 视频 本教程的视频版在B站这里. 准备工作 在正式开始 nGQL 实操之前,记得 ...
 - 别再低效筛选数据了!试试pandas query函数
			
数据过滤在数据分析过程中具有极其重要的地位,因为在真实世界的数据集中,往往存在重复.缺失或异常的数据.pandas提供的数据过滤功能可以帮助我们轻松地识别和处理这些问题数据,从而确保数据的质量和准确性 ...
 - Java 常用类 String类与其他结构之间的转换-----String 与 byte[]之间的转换
			
1 /** 2 * 3 * String 与 byte[]之间的转换 4 * 编码:String ---> byte[]:调用String的getBytes() 5 * 解码:byte[]--- ...
 - 使用jenkins连接linux部署jar包
			
jenkins安装 首先安装jenkins,我们可以使用docker安装.用下面命令拉取jenkins镜像. docker pull jenkins/jenkins 然后正常安装jenkins容器即可 ...