当前位置: 首页 > news >正文

KingbaseES Schema权限及空间限额

一、权限授予操作

1. 基础权限赋予

1.1 创建测试环境

-- 1.创建测试用户
test=# CREATE USER schema_user WITH PASSWORD 'Schema@123';
CREATE ROLE-- 2.创建测试Schema
test=# CREATE SCHEMA test_schema AUTHORIZATION current_user;
CREATE SCHEMA-- 3. 创建测试表
test=# CREATE TABLE test_schema.employees (
test(#     id SERIAL PRIMARY KEY,
test(#     name VARCHAR(100),
test(#     salary NUMERIC
test(# );
CREATE TABLE-- 4. 插入测试数据
test=# INSERT INTO test_schema.employees (name, salary) VALUES
test-# ('张三', 8000),
test-# ('李四', 9500),
test-# ('王五', 12000);
INSERT 0 3

image

1.2 基本权限授予

-- 1. 授予Schema USAGE权限(允许用户使用该schema)
test=# GRANT USAGE ON SCHEMA test_schema TO test_user;
GRANT-- 授予Schema内所有表的查询权限
test=# GRANT SELECT ON ALL TABLES IN SCHEMA test_schema TO test_user;
GRANT-- 授予Schema内所有序列的使用权限
test=# GRANT USAGE ON ALL SEQUENCES IN SCHEMA test_schema TO test_user;
GRANT

image

2. 高级权限配置

2.1 为未来对象设置默认权限

-- 设置未来创建的表自动有SELECT权限
test=# ALTER DEFAULT PRIVILEGES IN SCHEMA test_schema
test-# GRANT SELECT ON TABLES TO schema_user;
ALTER DEFAULT PRIVILEGES-- 设置未来创建的序列自动有USAGE权限
test=# ALTER DEFAULT PRIVILEGES IN SCHEMA test_schema
test-# GRANT USAGE ON SEQUENCES TO schema_user;
ALTER DEFAULT PRIVILEGES

image

2.2 组合权限授予

-- 授予多种操作权限
test=# GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA test_schema TO schema_user;
GRANT-- 授予函数执行权限
test=# CREATE OR REPLACE FUNCTION test_schema.calculate_bonus(salary NUMERIC)
test-# RETURNS NUMERIC AS $$
test$# BEGIN
test$#     RETURN salary * 0.1;
test$# END;
test$# $$ LANGUAGE plpgsql;
CREATE FUNCTIONtest=# GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA test_schema TO schema_user;
GRANT

image

3. 权限精细控制

-- 1. 仅授予特定列权限
test=# GRANT SELECT (id, name) ON test_schema.employees TO schema_user;
GRANT
test=# CREATE ROLE schema_reader;
CREATE ROLE
test=# GRANT USAGE ON SCHEMA test_schema TO schema_reader;
GRANT
test=# GRANT SELECT ON ALL TABLES IN SCHEMA test_schema TO schema_reader;
GRANT
test=# GRANT schema_reader TO schema_user;
GRANT ROLE

image

二、权限测试步骤

1. 连接测试

[kingbase@node2 ~]$ ksql -U schema_user -d test
授权类型: 企业版.
输入 "help" 来获取帮助信息.test=>

image

2. 基础权限测试

-- 1. 测试Schema使用权限
test=> SET search_path TO test_schema;
SET
test=> SHOW search_path;search_path
-------------test_schema
(1 行记录)-- 2. 测试表查询权限
test=> SELECT * FROM employees;id | name | salary
----+------+--------1 | 张三 |   80002 | 李四 |   95003 | 王五 |  12000
(3 行记录)-- 3. 测试无权限操作(预期失败)
test=> DELETE FROM employees WHERE id = 1;
-- 预期错误: ERROR:  对表 employees 权限不够

image

3. 高级权限测试

3.1 DML操作测试

-- 如果授予了INSERT权限
test=> INSERT INTO employees (name, salary) VALUES ('赵六', 8800);
INSERT 0 1
test=> UPDATE employees SET salary = salary * 1.1 WHERE name = '张三';
UPDATE 1
test=> TRUNCATE TABLE employees;
-- 预期无权限错误 : ERROR:  对表 employees 权限不够

image

3.2 函数权限测试

-- 测试函数执行
test=> SELECT id, name, salary, test_schema.calculate_bonus(salary) AS bonus
test-> FROM employees;id | name | salary | bonus
----+------+--------+--------2 | 李四 |   9500 |  950.03 | 王五 |  12000 | 1200.04 | 赵六 |   8800 |  880.01 | 张三 | 8800.0 | 880.00
(4 行记录)

image

4. 默认权限测试

-- 管理员创建新表
test=# CREATE TABLE test_schema.departments (
test(#     id SERIAL PRIMARY KEY,
test(#     dept_name VARCHAR(100)
test(# );
CREATE TABLE-- schema_user测试对新表的访问权限
test=# \c test schema_user
您现在以用户名"schema_user"连接到数据库"test"。-- 如有默认权限设置应能成功查询
test=> SELECT * FROM test_schema.departments;id | dept_name
----+-----------
(0 行记录)

image

三、权限验证与管理

1. 权限查询方法

-- 1. 查询Schema权限
test=# SELECT grantee, privilege_type
test-# FROM information_schema.role_usage_grants
test-# WHERE object_schema = 'test_schema';grantee   | privilege_type
-------------+----------------system      | USAGEschema_user | USAGEsystem      | USAGEschema_user | USAGE
(4 行记录)test=# SELECT grantee, table_name, privilege_type
test-# FROM information_schema.table_privileges
test-# WHERE table_schema = 'test_schema';grantee    | table_name  | privilege_type
---------------+-------------+----------------system        | employees   | INSERTsystem        | employees   | SELECTsystem        | employees   | UPDATEsystem        | employees   | DELETEsystem        | employees   | TRUNCATEsystem        | employees   | REFERENCESsystem        | employees   | TRIGGERschema_user   | employees   | INSERTschema_user   | employees   | SELECTschema_user   | employees   | UPDATEschema_reader | employees   | SELECTsystem        | departments | INSERTsystem        | departments | SELECTsystem        | departments | UPDATEsystem        | departments | DELETEsystem        | departments | TRUNCATEsystem        | departments | REFERENCESsystem        | departments | TRIGGERschema_user   | departments | SELECT
(19 行记录)test=# SELECT grantee, table_name, column_name, privilege_type
test-# FROM information_schema.column_privileges
test-# WHERE table_schema = 'test_schema';grantee    | table_name  | column_name | privilege_type
---------------+-------------+-------------+----------------schema_reader | employees   | salary      | SELECTschema_user   | departments | dept_name   | SELECTsystem        | employees   | id          | INSERTsystem        | departments | dept_name   | SELECTsystem        | employees   | name        | UPDATEsystem        | employees   | id          | UPDATEschema_user   | employees   | salary      | UPDATEsystem        | employees   | name        | INSERTschema_user   | employees   | salary      | SELECTsystem        | departments | id          | SELECTsystem        | employees   | name        | REFERENCESsystem        | departments | dept_name   | REFERENCESsystem        | employees   | id          | SELECTschema_user   | employees   | salary      | INSERTschema_user   | employees   | name        | INSERTsystem        | employees   | name        | SELECTsystem        | employees   | salary      | SELECTsystem        | departments | id          | INSERTsystem        | departments | id          | REFERENCESschema_reader | employees   | id          | SELECTschema_user   | employees   | name        | UPDATEsystem        | departments | dept_name   | INSERTsystem        | employees   | salary      | REFERENCESsystem        | departments | id          | UPDATEschema_reader | employees   | name        | SELECTsystem        | departments | dept_name   | UPDATEschema_user   | departments | id          | SELECTsystem        | employees   | salary      | INSERTsystem        | employees   | id          | REFERENCESschema_user   | employees   | name        | SELECTschema_user   | employees   | id          | INSERTsystem        | employees   | salary      | UPDATEschema_user   | employees   | id          | SELECTschema_user   | employees   | id          | UPDATE
(34 行记录)

image
image

本次测试KingbaseESV009R001C010 Oracle兼容模式。

http://www.hskmm.com/?act=detail&tid=9819

相关文章:

  • HTTP库开发实战:核心库与httpplus扩展库示例解析
  • QMT交易系统向服务器同步订单丢失问题排查
  • 笔记1
  • 用 Python 和 Tesseract 实现英文数字验证码识别
  • 实用指南:OSPF特殊区域、路由汇总及其他特性
  • 禅道以及bug
  • 中电金信 :MCP在智能体应用中的挑战与对策
  • 第一次参与开源的时序数据库 IoTDB Committer:这份成就感是无可替代的
  • ECT-OS-JiuHuaShan 框架元推理的意义、价值、作用、应用场景和哲学理念的充分阐述:AGI奇点
  • CSP 2025 复赛复习总目标与计划
  • mysql区分大小写吗,你可能忽略了这些关键细节
  • route-link 和 a 的区别
  • WPF 调用 Windows 桌面右键新增文件菜单的实现方案
  • HR 需了解的绩效评估应包含的内容
  • 解题报告-P12022 [USACO25OPEN] Hoof Paper Scissors Minus One B
  • CentOS架构修改网卡命名的方法总结
  • np.clip的使用
  • 重看P4211 [LNOI2014] LCA 以及 P5305 [GXOI/GZOI2019] 旧词 题解
  • 25.9.19随笔联考总结
  • 解题报告-P12025 [USACO25OPEN] Sequence Construction S
  • 解题报告-P12026 [USACO25OPEN] Compatible Pairs S
  • maxu
  • 20
  • 19
  • 18
  • 详细介绍:【 C/C++ 算法】入门动态规划-----一维动态规划基础(以练代学式)
  • iOS 26 能耗检测实战指南 如何监测 iPhone 电池掉电、Adaptive Power 模式效果与后台耗能问题(uni-app 与原生 App 优化必看)
  • Transformer的个人理解
  • 国标GB28181平台EasyGBS如何实现企业园区视频监控一体化管理?
  • 360环视硬件平台为什么推荐使用米尔RK3576开发板?