前言

本文的目的是实现u1用户访问ud用户下的视图权限。

测试

  1. 登录system用户并创建schemauser,并授权schema的有关权限给ud用户
  2. TEST=# select current_user;
  3. current_user
  4. --------------
  5. system
  6. (1 row)
  7. TEST=# create schema ud;
  8. CREATE SCHEMA
  9. TEST=#
  10. TEST=# create user ud;
  11. CREATE ROLE
  12. TEST=# grant usage on schema ud to ud;
  13. GRANT
  14. TEST=#
  15. TEST=# grant select ON ALL TABLES IN SCHEMA ud to ud;
  16. GRANT
  17. TEST=# grant create on schema ud to ud;
  18. GRANT
  19. 登录ud用户并执行命令
  20. TEST=# \c - ud
  21. You are now connected to database "TEST" as user "ud".
  22. TEST=> create table ti (id int);
  23. CREATE TABLE
  24. TEST=> insert into ti values(1);
  25. INSERT 0 1
  26. TEST=>
  27. TEST=> select * from ti;
  28. id
  29. ----
  30. 1
  31. (1 row)
  32. TEST=> create view view_tu as select * from ti;
  33. CREATE VIEW
  34. TEST=>
  35. TEST=> select * from view_tu;
  36. id
  37. ----
  38. 1
  39. (1 row)
  40. 登录system用户,创建role01并把视图的查询权限赋给role01
  41. TEST=> \c - system
  42. You are now connected to database "TEST" as user "system".
  43. TEST=#
  44. TEST=#
  45. TEST=# create role role01;
  46. CREATE ROLE
  47. TEST=# grant select on ud.view_tu to role01;
  48. GRANT
  49. role01角色赋给u1用户
  50. TEST=# grant role01 to u1;
  51. GRANT ROLE
  52. TEST=#
  53. TEST=# \du
  54. List of roles
  55. Role name | Attributes | Member of
  56. -----------+------------------------------------------------------------+------------
  57. ab | | {ceshi001}
  58. ceshi001 | Cannot login | {}
  59. manager | Cannot login | {}
  60. role01 | Cannot login | {}
  61. sao | No inheritance | {}
  62. sso | No inheritance | {}
  63. system | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
  64. u1 | | {role01}
  65. ud | | {role01}
  66. 登录u1用户,查询schema ud下的视图,报错权限不足
  67. TEST=# \c - u1;
  68. You are now connected to database "TEST" as user "u1".
  69. TEST=>
  70. TEST=> select * from ud.view_tu;
  71. ERROR: permission denied for schema ud
  72. LINE 1: select * from ud.view_tu;
  73. ^
  74. 登录system用户并把schema ud 的权限赋给u1
  75. TEST=> \c - system
  76. You are now connected to database "TEST" as user "system".
  77. TEST=#
  78. TEST=#
  79. TEST=# grant all privileges on schema ud to u1;
  80. GRANT
  81. TEST=#
  82. 登录u1用户,授权后可以查询schema ud的视图
  83. TEST=# \c - u1
  84. You are now connected to database "TEST" as user "u1".
  85. TEST=>
  86. TEST=> select * from ud.view_tu;
  87. id
  88. ----
  89. 1
  90. (1 row)

总结

  1. 如下,我们看到角色role01有视图view_tu的查询权限
  2. Access privileges
  3. Schema | Name | Type | Access privileges | Column privileges | Policies
  4. --------+---------+------+-------------------+-------------------+----------
  5. ud | view_tu | view | ud=arwdDxt/ud +| |
  6. | | | role01=r/ud | |
  7. (1 row)
  8. 如下,我们看到u1用户拥有角色role01的权限
  9. TEST=> \du
  10. List of roles
  11. Role name | Attributes | Member of
  12. -----------+------------------------------------------------------------+------------
  13. ab | | {ceshi001}
  14. ceshi001 | Cannot login | {}
  15. manager | Cannot login | {}
  16. role01 | Cannot login | {}
  17. sao | No inheritance | {}
  18. sso | No inheritance | {}
  19. system | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
  20. u1 | | {role01}
  21. ud | | {role01}
  22. 因为前面执行过一个授权语句:grant all privileges on schema ud to u1;
  23. 根据以下sql查询权限得知u1拥有了在schema udUSAGECREATE权限
  24. select a.nspname,b.rolname,string_agg(a.pri_t,',') from
  25. (select nspname,(aclexplode(COALESCE(nspacl, acldefault('n'::"char",nspowner)))).grantee as grantee,
  26. (aclexplode(COALESCE(nspacl, acldefault('n'::"char",nspowner)))).privilege_type as pri_t
  27. from pg_namespace where nspname not like 'pg%' and nspname <> 'information_schema') a,pg_authid b
  28. where (a.grantee=b.oid or a.grantee=0) and b.rolname='u1' group by a.nspname,b.rolname;
  29. nspname | rolname | string_agg
  30. -------------+---------+--------------
  31. public | u1 | USAGE,CREATE
  32. sys | u1 | USAGE
  33. sys_catalog | u1 | USAGE
  34. sysaudit | u1 | USAGE,CREATE
  35. sysmac | u1 | USAGE
  36. ud | u1 | USAGE,CREATE
  37. (6 rows)
  38. 经过以上的授权步骤我们可以看出,如果要实现u1用户对ud用户下视图的查询权限需要经过一些列复杂的授权过程。
  39. 尤其需要注意u1schema ud的有关权限,否则即使拥有角色role01的查询权限也无法查看其他schema下视图。

KingbaseES 数据库中不同user的视图访问授权的更多相关文章

  1. 查看SQL Server数据库中各个表和视图的索引所占的空间大小

    ;with cte as ( (select t.name as TableName,i.name as IndexName, sum(row_count)as row_count, SUM (s.u ...

  2. sqlserver2008 数据库中查询存储过程的的创建修改和执行时间,以及比较常见的系统视图和存储过程

    因为各种原因数据库中存在大量无用的存储过程,想查询存储过程的最后执行情况,处理长期不使用的存储过程 下面这条语句可以查询存储过程创建 修改和执行的最后时间: SELECT a.name AS 存储过程 ...

  3. KingbaseES数据库目录结构

    KingbaseES数据库目录结构 [kingbase@postgres V8]$ tree -LP 2 data/ . ├── data │ ├── base # 存储用户创建的数据库文件及隶属于用 ...

  4. SQlServer 从系统表 sysobjects 中获取数据库中所有表或存储过程等对象

    [sysobjects] 一.概述 系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等,该表中包含该数据库中的表 存储过程 视图等所有对象 在sqlserver2005,sql ...

  5. 如何将数据库中已有表导入到powerDesigner生成pdm文件

    1.create new PDM: 2.select database menu; 3.click Reverse  Engineer database :4.then choose your scr ...

  6. 查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数

    查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06|  分类: SQL SERVER|举报|字号 订阅     ( ...

  7. 数据库中树形列表(以easyui的tree为例)

    构造一棵easyui前台框架的一个树形列表为例后台框架是spring MVC+JPA. 先看一下数据库是怎么建的,怎么存放的数据 下面是实体类 /** * 部门类 用户所属部门(这里的部门是一个相对抽 ...

  8. 批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor

    批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor2.1.11 之前写过一篇文章,使用redgate公司的SQL PROMPT工具,但是不太方便 SQLPRO ...

  9. XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo

    本主题介绍如何启用管理模型差异(XAFML),并将设置存储在数据库中.   名词解释: 1.模型:XAF中把所有应用程序的结构都用模型来定义,比如列表,有哪些列,名称是什么,对应的字段名是什么,业务对 ...

  10. Oracle数据库中SYS、SYSTEM、DBSNMP、SYSMAN四用户的区别

    [转]   SYS.SYSTEM.DBSNMP. Oracle 数据库中 SYS.SYSTEM.DBSNMP.SYSMAN 四用户的区别 用户: SYS 用户: SYS,默认密码为 CHANGE_ON ...

随机推荐

  1. SQL中为什么不要使用1=1?

    最近看几个老项目的SQL条件中使用了1=1,想想自己也曾经这样写过,略有感触,特别拿出来说道说道. 编写SQL语句就像炒菜,每一种调料的使用都会影响菜品的最终味道,每一个SQL条件的加入也会影响查询的 ...

  2. 【OpenGL ES】立方体手动旋转

    1 前言 ​ 本文主要介绍使用 OpenGL ES 绘制立方体,并实现手动触摸事件控制立方体旋转. ​ 为方便控制触摸旋转,假设旋转轴始终在 xoy 平面上,设 z 轴的方向向量 u = (0, 0, ...

  3. Stream 总结

    1 前言 Stream 是 Java 8 中为方便操作集合及其元素而定制的接口,它将要处理的元素集合看作一种流,对流中的元素进行过滤.排序.映射.聚合等操作.使用 Stream API,就好像使用 S ...

  4. 使用marquee标签实现文字滚动

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  5. 如何用Apipost校验响应结果

    数据校验的意义 我们可以通过 json-schema 预先定义接口的数据返回格式,当接口完成后,我们可以通过匹配 实际响应结果 和 预先定义的接口格式 ,来发现接口问题.如下图: 数据校验的设置 我们 ...

  6. Docker实践之05-限制Docker容器运行资源

    Docker容器在默认情况下会使用宿主机的所有CPU和内存资源,为了明确限制每一个Docker容器的运行资源,需按如下操作进行设置. 首先,执行:sudo docker info,如果提示:" ...

  7. KPTP 汇报模板

    1.什么是KPTP 它是由4个单词:Keep.Problem.Try.Plan的首字母组成的. K:keep,今天做了哪些工作: P:problem,遇到了哪些问题: T:try,计划尝试如何解决这些 ...

  8. Gin框架使用jwt-go配合中间件认证

    参考文档 // 文档 https://github.com/golang-jwt/jwt https://pkg.go.dev/github.com/golang-jwt/jwt@v3.2.2+inc ...

  9. 21 Educational Codeforces Round 136 (Rated for Div. 2)Knowledge Cards(树状数组、set、+思维、数字华容道)

    最开始猜了个结论错了,猜的是必须要有\(m+n-1\)个方格空着,这样才能保证任意一张牌能从起点到终点. 其实并不是,参考数字华容道,实际上是只要除了终点和起点,以及自身这个方格.我们只需要留出一个空 ...

  10. 面试准备不充分,被Java守护线程干懵了,面试官主打一个东西没用但你得会

    写在开头 面试官:小伙子请聊一聊Java中的精灵线程? 我:什么?精灵线程?啥时候精灵线程? 面试官:精灵线程没听过?那守护线程呢? 我:守护线程知道,就是为普通线程服务的线程嘛. 面试官:没了?守护 ...