KingbaseES 授予schema下对象权限以及schema空间限额

授予schema下对象权限

创建一个名为schematest的schema:

CREATE SCHEMA schematest;    

创建一个新的用户,名为test02用户:

创建一个新的用户,名为test02用户:

如果不对test02用户授予任何权限,切换到test02用户执行craete table命令会提示权限不足
下面授予名为 test02 的用户对 schematest的所有权限:此命令将授予该用户在 schematest 中创建、修改和删除表、视图等其他对象的权限。

GRANT ALL ON SCHEMA schematest TO test02;

使用 \c 命令连接到数据库,并尝试在该用户的 schema 中创建一个新表:

\c test test02
test=> create table schematest.t5(id int);
CREATE TABLE

这将在 test02 用户的 schematest中创建一个名为 t5 的新表。
经验证该用户只能在自己的 schema 中访问它:

test=> SELECT * FROM schematest.t5;
 id
----
(0 rows)

如果尝试在其他 schema 中查询该表,会收到提示没有该表。
这是因为我们并没有在 public 模式下创建该表:

test=> SELECT * FROM t5;
错误:  关系 "t5" 不存在
LINE 1: SELECT * FROM t5;                   

test=> SELECT * FROM public.t5;
错误:  关系 "public.t5" 不存在
LINE 1: SELECT * FROM public.t5;

对于public模式下存在的表,该用户也没有权限访问:

test=> select * from public.t1;
错误:  对表 t1 权限不够

如果希望授予该用户在public schema 中有访问权限,请使用以下命令:

GRANT USAGE ON SCHEMA public TO test02;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO test02;

此时用户 test02 对 public schema 中对象有查询权限。

schema空间配额

我们没办法直接对scehma限制空间使用,可以通过表空间配额插件,把schema下的表放进限额表空间,间接控制scehma的空间配额。

表空间限额插件参考文档:
https://www.cnblogs.com/kingbase/p/17461137.html

查询schema容量:

SELECT 
  nspname AS schema_name, 
  sys_size_pretty(sum(sys_total_relation_size(sys_class.oid))) AS total_size
FROM 
  sys_class 
  JOIN sys_namespace ON sys_namespace.oid = sys_class.relnamespace
WHERE 
  nspname NOT LIKE 'pg_%' AND nspname != 'information_schema'
GROUP BY 
  nspname;
posted @ 2024-04-03 17:00  KINGBASE研究院  阅读(150)  评论(0编辑  收藏  举报