首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >02.YashanDB 用户(User)与角色(role)

02.YashanDB 用户(User)与角色(role)

作者头像
用户3107127
发布2026-07-09 15:54:27
发布2026-07-09 15:54:27
50
举报

系列文章:

  1. 从兼容到超越:YashanDB—— 技术突破者,还是国产数据库的革命者?

YashanDB 用户、权限与角色全解析:从基础到实战

在数据库管理中,用户、权限与角色是保障数据安全和高效运维的核心模块。本文将系统梳理 YashanDB 中这三大组件的概念、操作方法及注意事项,附带实战代码示例,帮你快速掌握核心管理能力。

一、用户与模式:数据库访问的基础载体

1. 核心概念

  • 用户:登录数据库的账号,是访问数据库的逻辑对象(如 SYS、sales)。
  • 模式(Schema):数据库对象的集合(如表、索引),用于归类管理。访问格式为 schema_name.object_name。

👉 YashanDB 特殊规则:每一个用户对应一个 Schema,且 Schema 名称与用户名完全一致。

2. 用户分类

YashanDB 的用户分为两类,职责边界清晰:

类型

定义与作用

代表示例

系统用户

预置在产品中,负责核心管理

SYS(超级管理员,拥有全部权限)

普通用户

通过CREATE USER语句创建,用于业务操作

sales、sales01

3. 用户操作实战(附代码)

(1)创建用户

创建时可指定密码、默认表空间(需提前用CREATE TABLESPACE创建表空间):

代码语言:javascript
复制
-- 示例1:基础创建(仅指定密码)
create user sales identified by 123456;
-- 示例2:指定默认表空间
create user sales01 identified by 123456 default tablespace others;
(2)修改用户

支持修改密码、默认表空间、锁定 / 解锁账号:

代码语言:javascript
复制
-- 修改密码
alter user sales identified by sales;
-- 修改默认表空间
alter user sales default tablespace user;
-- 锁定/解锁用户
alter user sales account lock;  -- 锁定
alter user sales account unlock;-- 解锁
(3)删除用户

⚠️ 注意:需拥有DELETE USER权限;登录中用户无法删除;删除时需处理用户下对象。

代码语言:javascript
复制
-- 无对象时删除
drop user sales;
-- 含对象时强制删除(同时删除所有对象)
drop user sales cascade;

二、权限管理:控制操作边界的核心

权限决定用户能 “做什么”,YashanDB 将其分为系统权限对象权限,精准控制操作范围。

1. 权限分类与说明

(1)系统权限(作用于系统 / 全局)

权限名称

权限描述

ALL PRIVILEGES

所有系统权限(谨慎授予)

ALTER SYSTEM

修改系统级参数

ALTER DATABASE

修改数据库级参数

CREATE USER

创建普通用户

CREATE ROLE

创建自定义角色

INSERT ANY TABLE

对非 SYS schema 下任意表插入数据

CREATE TABLE

在自身 schema 下创建表

CREATE ANY TABLE

在非 SYS schema 下任意位置创建表

CREATE SESSION

登录数据库的基础权限(必需)

(2)对象权限(作用于具体对象)

权限名称

权限描述

ALL PRIVILEGES

对该对象的所有操作权限

INSERT

插入数据到表

SELECT

查询表数据(SELECT语句)

UPDATE

更新表数据

DELETE

删除表数据

ALTER

修改表结构(如添加字段)

INDEX

为表创建索引

FLASHBACK

闪回表数据至指定时间点

2. 权限的授予与收回

(1)系统权限的授予

🔑 授权条件(满足其一即可):

  • 授权者拥有该权限且带ADMIN OPTION;
  • 授权者拥有GRANT ANY PRIVILEGE权限;
  • 未开三权分立时,授权者拥有DBA角色;
  • 开启三权分立时,授权者拥有SECURITY_ADMIN角色。
代码语言:javascript
复制
-- 示例1:授予用户sales查询所有表的权限
grant select any table to sales;
-- 示例2:授予权限并允许用户传递管理(带ADMIN OPTION)
grant select any table to sales with admin option;
(2)对象权限的授予

🔑 授权条件(满足其一即可):

  • 授权者是对象的所有者;
  • 授权者拥有该对象权限且带GRANT OPTION;
  • 授权者拥有GRANT ANY OBJECT PRIVILEGE权限;
  • 未开三权分立时,授权者拥有DBA角色;
  • 开启三权分立时,授权者拥有SECURITY_ADMIN角色。
代码语言:javascript
复制
-- 示例1:授予sales01查询sales.area表的权限
grant select on sales.area to sales01;
-- 示例2:授予权限并允许传递管理(带GRANT OPTION)
grant select on sales.area to sales01 with grant option;
(3)权限的收回

⚠️ 注意:收回后立即生效,需确认不影响业务运行。

代码语言:javascript
复制
-- 收回系统权限(查询所有表)
revoke select any table from sales;
-- 收回对象权限(查询sales.area表)
revoke select on sales.area from sales01;

三、角色管理:简化权限批量分配

角色是 “权限的集合”,通过给用户分配角色,可避免重复授予单个权限,大幅提升管理效率。

1. 角色的核心规则

  • 角色只能授予用户,不能授予其他角色
  • 用户与角色不能同名(如已有DBA角色,无法创建DBA用户);
  • 角色权限对新会话生效(已登录用户需重新登录)。

2. 角色分类

(1)系统内置角色(无需创建,直接使用)

角色名称

权限描述

DBA

未开三权分立:几乎所有权限(除 SHUTDOWN);开启后:无审计 / 安全权限,仅基础 DDL 权限

AUDIT_ADMIN

所有审计相关权限(创建 / 删除 / 启用审计策略等)

SECURITY_ADMIN

所有安全相关权限(管理用户 / 角色 / 权限等)

SYSDBA/SYSOPER

仅拥有SHUTDOWN权限

PUBLIC

所有用户默认拥有,默认无权限;>⚠️ 谨慎授权(可能导致数据泄露)

CONNECT

拥有CREATE SESSION权限(用户登录必需)

RESOURCE

拥有创建表、序列、存储过程、触发器的权限

(2)自定义角色(按需创建)

通过CREATE ROLE创建,再关联权限,最后授予用户。

3. 自定义角色操作实战

代码语言:javascript
复制
-- 1. 创建角色role1
create role role1;
-- 2. 给角色授予权限(系统权限+对象权限)
grant select any table to role1;  -- 系统权限
grant insert on sales.area to role1;  -- 对象权限
⚠️ 注意:角色不能带ADMIN/GRANT OPTION授权
-- 3. 将角色授予用户sales
grant role1 to sales;
⚠️ 注意:需重新登录会话生效
-- 4. 删除角色(禁止删除内置角色)
drop role role1;
⚠️ 注意:删除后,拥有该角色的用户会延时失去权限,需谨慎

四、权限相关系统视图:快速查询信息

通过以下系统视图,可实时查看用户、角色、权限的配置情况:

视图名称

作用

关键字段示例

DBA_USERS

查看所有用户信息

USERNAME(用户名)、ACCOUNT_STATUS(账号状态)

DBA_ROLES

查看所有角色信息

ROLE(角色名)、SYS_MAINTAINED(是否系统角色)

DBA_ROLE_PRIVS

查看角色授权记录

GRANTEE(被授权者)、GRANTED_ROLE(角色)

DBA_SYS_PRIVS

查看系统权限授权记录

GRANTEE(被授权者)、PRIVILEGE(权限)

DBA_TAB_PRIVS

查看对象权限授权记录

GRANTEE(被授权者)、TABLE_NAME(表名)

示例查询:
代码语言:javascript
复制
-- 查看所有用户的用户名、账号状态、创建时间
select username, account_status, created from dba_users;
-- 查看自定义角色(SYS_MAINTAINED='NO')
select * from dba_roles where SYS_MAINTAINED='NO';

后记:关于三权账号的研究

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ByteHouse 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • YashanDB 用户、权限与角色全解析:从基础到实战
    • 一、用户与模式:数据库访问的基础载体
      • 1. 核心概念
      • 2. 用户分类
      • 3. 用户操作实战(附代码)
    • 二、权限管理:控制操作边界的核心
      • 1. 权限分类与说明
      • 2. 权限的授予与收回
    • 三、角色管理:简化权限批量分配
      • 1. 角色的核心规则
      • 2. 角色分类
      • 3. 自定义角色操作实战
    • 四、权限相关系统视图:快速查询信息
    • 后记:关于三权账号的研究
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档