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

kingbase金仓数据库的用户权限管理

在数据库管理中,用户权限是数据安全的核心组成部分,合理配置用户权限可以防止未经授权的访问和数据泄露。

1、用户(User)和角色(Role)管理

在金仓数据库中,USER 和 ROLE 概念上是相同的(类似于PostgreSQL),主要区别在于:

  • 用户(USER):通常用于登录数据库(默认有LOGIN权限)。
  • 角色(ROLE):主要用于权限分组,也可以被用户继承。

1.1 创建用户

CREATE USER 用户名 [ WITH ] option [ ... ] 例:CREATE USER username WITH PASSWORD 'password';
-- 或CREATE ROLE username WITH LOGIN PASSWORD 'password';
可选参数 解释
SUPERUSER 超级用户
CREATEDB 允许创建数据库
CREATEROLE 允许创建角色
LONGIN 允许登录
PASSWORD 指定密码

新用户的默认权限:创建新用户帐户时,默认此用户有连接(LOGIN)数据库的权限,用户帐户可以具有默认角色和表空间限制等限制

用户名的限制:创建指定用户名的用户时,请注意命名名称是否唯一等限制,而且用户名的长度不可以大于63字节。

用户密码:使用PASSWORD关键字为用户设置密码。

用户的默认角色:用户建立连接后即具有默认角色的所有权限。

1.2 修改用户

ALTER USER 用户名 [ WITH ] option [ ... ]例:ALTER USER username WITH PASSWORD 'new_password';
ALTER USER username WITH CREATEDB CREATEROLE;
ALTER USER username RENAME TO new_username;
可选参数 解释
SUPERUSER 超级用户
CREATEDB 允许创建数据库
CREATEROLE 允许创建角色
LONGIN 允许登录
PASSWORD 指定密码

一般情况下,系统管理员可以修改所有普通用户密码。普通用户可以修改自己的密码,但不能修改其他用户的密码,除非有CREATEROLE权限。 安全管理员(sso)和审计管理员(sao)的用户密码只能由自己修改。

2.3 删除用户

DROP USER [ IF EXISTS ] 用户名 [...] 例:DROP USER username;
-- 或
DROP ROLE IF EXISTS username;

删除一个数据库管理员角色,必须本身就是一个数据库管理员。

删除一个非数据库管理员角色,必须具有 CREATEROLE特权。

如果一个角色仍然被集簇中任何数据库中引用,它就不能被移除。如果尝试删除将会抛出一个错误,在删除该角色前,必须删除(或者重新授予所有权)它所拥有的所有对象并且收回该已经授予给该角色的在其他对象上的特权。

没有必要删除涉及该角色的角色成员关系。DROP ROLE 会自动收回目标角色在其他角色中的成员关系,以及其他角色在目标角色中的成员关系,其他角色不会被删除也不会被影响。



2、权限分类

金仓数据库的权限主要包括:

数据库权限 CONNECT、CREATE
Schema权限 USAGE、CREATE
表/视图/序列权限 SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER
函数权限 EXECUTE
自定义权限 -

系统权限:

系统权限是执行特定操作的权限,不直接关联具体数据库对象,主要用于数据库管理和维护。 这些权限包括:CREATE DATABASE、CREATE USER、CREATE ROLE 的权限等 在KingbaseES数据库系统中有一系列的系统内置预定义特权,系统用这些特权去控制数据的安全。由于系统特权非常强大,创建用户是默认只拥有LOGIN权限。

只有两种类型的用户可以向其他用户授予系统权限或撤销这些权限:

1、被授予特定系统特权的用户 2、具有超级权限的用户

对象权限:

对象权限是对给定的用户授予在给定对象(例如表)上执行的操作集。这些操作可以指明为INSERT、SELECT 等,具体各类对象具有的权限类型可参见GRANT 和REVOKE 语句的说明。对象分为如下两类:

模式对象:可以理解为一个存储目录,包含视图、索引、数据类型、函数和操作符等。

非模式对象:其他的数据库对象,如数据库、表空间、用户、权限。

列级权限:

列级权限 是对给定的用户授予在给定表或视图上某些列执行操作集。 此动作只能为INSERT、UPDATE和REFERENCES。




3、权限管理SQL

3.1 授予权限:

系统特权不能进行转授,只有满足以下条件的用户可以向其他用户授予系统权限:

  • 授予特定系统特权的用户
  • 有超级权限的用户
    系统特权可以在创建用户时授予,或使用ALTER语句授予。

对象权限每种类型的对象都有相关联的权限,用户可以使用 GRANT 语句向角色和用户授予对象权限,对象权限可以转授。

授权者必须满足下列条件之一:

  • 是该对象的拥有者。
  • 已被授予超级用户权限或者 any管理特权。
  • 在之前被授予对象特权时,指定了WITH GRANT OPTION,拥有转授的权利。
-- 授权数据库访问
GRANT CONNECT ON DATABASE dbname TO username;-- 授权Schema访问
GRANT USAGE ON SCHEMA schemaname TO username;-- 授权表权限
GRANT SELECT, INSERT, UPDATE ON TABLE tablename TO username;-- 授权所有表的权限
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schemaname TO username;-- 授权执行函数
GRANT EXECUTE ON FUNCTION function_name TO username;-- 授权角色给用户
GRANT role_name TO username;

注:

使用GRANT语句时,可以通过指定不同的关键字,实现不同的授权方式:

授予所有权限

ALL PRIVILEGES表示授予对象类型的所有可用特权。

授予所有角色

使用PUBLIC可以将权限授予所有角色,包括那些可能稍后会被创建的角色。可以将PUBLIC看作是一个隐式定义的组,始终包含所有角色。任何角色的权限都来源于三个途径:直接被授予的权限、从其所属的其他角色中继承的权限,以及从PUBLIC角色中获得的通用权限。

转授权限

当某个角色或用户被授权时指定了WITH ADMIN OPTION,该角色或用户就获得了转授权限的能力。这意味着他们不仅可以将所拥有的角色成员关系或特定权限授予其他用户或角色,也有权利撤回。如果角色或用户被授权时没有被指定WITH ADMIN OPTION管理选项,则不能做这些工作。

一个角色默认不拥有对自身的WITH ADMIN OPTION权限,但是在数据库会话中,如果会话用户匹配该角色,则该角色可以授予或撤回其自身的成员关系。

举例说明:如果角色 g1是表 t1的拥有者,并且u1是 g1的成员,则 u1可以把 t1上的特权授予给 u2。这些特权看起来就像是由 g1直接授予的,角色 g1的其他任何成员都可以稍后撤回它们。

列级授权

用户可以对表中的各个列授予 INSERT 、UPDATE 、REFERENCES 权限。


3.2 撤销权限:

使用 REVOKE 语句和 ALTER USER 语句可以执行特定的权限撤销操作。当用户撤销系统或对象权限时,请注意撤销权限的级联效应。

  • 撤销系统特权

ALTER USER 语句可以撤销系统特权。

  • 撤销对象特权

用户可以使用 REVOKE 语句撤销多个对象权限、代表对象所有者的对象权限、列选择性对象权限和 REFERENCES 对象权限。

  • 撤销权限的连锁效应

与 DDL 操作相关的撤销对象特权没有级联效应,但对象特权撤销有级联效应。

--撤销建库权限ALTER USER test NOCREATEDB;  -- 撤销用户 u1 和 u2 对 orders 表的 INSERT 和 UPDATE 权限:REVOKE  INSERT,UPDATE  ON orders FROM u1, u2;-- 撤销 u1 在 orders 表上的所有权限:REVOKE ALL PRIVILEGES ON orders FROM  u1;-- 撤销用户 u1 表 orders 的 ORDERID 和 ORDERDATE 列插入权限:REVOKE INSERT (orderid,orderdate) ON orders FROM u1;

注:

使用REVOKE语句时,可以通过指定不同的关键字,实现不同的撤销权限方式:

撤销多个对象权限

REVOKE 语句支持撤销同一个对象的多个权限。

撤销对象的所有权限

通过指定ALL PRIVILEGES来撤销授予对象的所有可用权限。

撤销所有用户权限

通过REVOKE FROM PUBLIC可以撤销所有用户在某个对象上的权限。但通过PUBLIC撤销并意味着所有角色都会失去在该对象上的权限。那些直接被授权或者通过其他角色被授权的用户,仍将保留这些权限。同样,即使从一个用户撤销某项权限后,如果PUBLIC或者该用户所属其他成员关系角色仍有该权限,该用户还是可以使用该权限。

此外在撤销时如果指定了 GRANT OPTION FOR,只会撤销该权限的转授权限,权限本身不被撤销。否则,权限及其转授权限都会被撤销。

代表对象所有者撤销对象特权

用户只能撤销其直接授予的权限。若用户将某项权限授予其他用户并允许转授(WITH GRANT OPTION),则其他用户持有的该权限被称为依赖特权。当原始用户需要撤销其权限或转授选项时,若存在依赖权限,可以指定CASCADE选项以递归撤销这些依赖特权,否则会导致撤销失败。递归撤销只影响通过原始 REVOKE 命令主体用户链授予的特权。如果该权限经由其他用户授予给受影响用户,受影响用户可能实际上还保留有该权限。

举例1:假设用户A已将某项特权授予用户B并允许其转授,而用户B随后又将此特权授予用户C,则用户A无法直接从C收回该特权。但A可以从B撤销该特权的授予权并使用 CASCADE选项,从而依次从C撤销该特权。

举例2:如果A和B都给C授予了同一特权,A能够撤销自己给C授权,但不能撤销B给C的授权,因此C实际上仍将拥有该特权。

撤销列级权限
用户可以撤销对表中的各个列的 INSERT 、UPDATE 、REFERENCES 权限。

此外,当从一个表上撤销权限时,该表的列权限也会被撤销。但如果一个角色已经被授予表上的特权,那么从个别的列上撤销同一个特权将不会生效。

3.3 查看当前权限:

相关系统视图和字典

视图和字典 描述
sys_user 所有用户信息
sys_roles 所有角色信息
DBA_TAB_PRIVS 被授权者的所有对象的授权
SESSION_USER 当前会话角色
CURRENT_USER 当前角色
sys_sysprivilege 所有拥有系统ANY权限的用户。
user_any_privs 每个用户只可以查看自己的拥有的ANY权限。

-- 查看用户权限
SELECT * FROM pg_user;

-- 查看角色权限
SELECT * FROM pg_roles;

-- 查看表的访问权限
\dp tablename


3.4 角色继承与组管理:

-- 1. 创建角色(组)
CREATE ROLE readonly;
CREATE ROLE readwrite;-- 2. 授予组权限
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO readwrite;-- 3. 把用户加入组
GRANT readonly TO user1;
GRANT readwrite TO user2;
http://www.wxhsa.cn/company.asp?id=1074

相关文章:

  • C++14之exchange
  • Blazor之第三方登录
  • 深入解析:物联网时序数据库IoTDB是什么?
  • wpf 后台获取资源字典对象
  • POJ 3601 Subsequence
  • 【IEEE出版】第十届计算机技术与机械电气工程国际学术论坛(ISCME 2025)
  • Python-httpx库的post请求的几种参数的区别
  • 精准把控人力,PJMan “负荷分析” 助力项目高效推进
  • 92. 递归实现指数型枚举
  • Logstash、Filebeat和Fluent比较
  • 车载电动充气泵芯片方案设计
  • [题解]P4281 [AHOI2008] 紧急集合 / 聚会
  • 【API接口】最新可用红果短剧接口
  • 微信个人号接口
  • 数据结构与算法-28.图
  • 剪映如何将草稿分享给别人?
  • 测试开发私教服务班4.0:大厂导师1对1带你突破职业瓶颈!
  • 深入理解Java对象:从创建到内存访问的JVM底层机制
  • 【AP出版】第八届人文教育与社会科学国际学术会议(ICHESS 2025)
  • 从零开始搭建Qwen智能体:新手也能轻松上手指南
  • # 简单贪心题(greedy)
  • 免安装在线录屏神器推荐:纯前端屏幕录制工具使用指南
  • sqlalchemy连接池的长连接一直占用,无法释放导致服务卡住
  • 锁相关记录
  • 加入任务计划
  • 使用yolo算法对视频进行实时目标跟踪和分割
  • qoj2607 Survey
  • ubuntu24修改网络ip
  • ShardingSphere入门篇
  • 一个完整的项目管理流程都包括哪些环节?