系列文章:
在数据库管理中,用户、权限与角色是保障数据安全和高效运维的核心模块。本文将系统梳理 YashanDB 中这三大组件的概念、操作方法及注意事项,附带实战代码示例,帮你快速掌握核心管理能力。
👉 YashanDB 特殊规则:每一个用户对应一个 Schema,且 Schema 名称与用户名完全一致。
YashanDB 的用户分为两类,职责边界清晰:
类型 | 定义与作用 | 代表示例 |
|---|---|---|
系统用户 | 预置在产品中,负责核心管理 | SYS(超级管理员,拥有全部权限) |
普通用户 | 通过CREATE USER语句创建,用于业务操作 | sales、sales01 |
创建时可指定密码、默认表空间(需提前用CREATE TABLESPACE创建表空间):
-- 示例1:基础创建(仅指定密码)
create user sales identified by 123456;
-- 示例2:指定默认表空间
create user sales01 identified by 123456 default tablespace others;支持修改密码、默认表空间、锁定 / 解锁账号:
-- 修改密码
alter user sales identified by sales;
-- 修改默认表空间
alter user sales default tablespace user;
-- 锁定/解锁用户
alter user sales account lock; -- 锁定
alter user sales account unlock;-- 解锁⚠️ 注意:需拥有DELETE USER权限;登录中用户无法删除;删除时需处理用户下对象。
-- 无对象时删除
drop user sales;
-- 含对象时强制删除(同时删除所有对象)
drop user sales cascade;权限决定用户能 “做什么”,YashanDB 将其分为系统权限和对象权限,精准控制操作范围。
权限名称 | 权限描述 |
|---|---|
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 | 登录数据库的基础权限(必需) |
权限名称 | 权限描述 |
|---|---|
ALL PRIVILEGES | 对该对象的所有操作权限 |
INSERT | 插入数据到表 |
SELECT | 查询表数据(SELECT语句) |
UPDATE | 更新表数据 |
DELETE | 删除表数据 |
ALTER | 修改表结构(如添加字段) |
INDEX | 为表创建索引 |
FLASHBACK | 闪回表数据至指定时间点 |
🔑 授权条件(满足其一即可):
-- 示例1:授予用户sales查询所有表的权限
grant select any table to sales;
-- 示例2:授予权限并允许用户传递管理(带ADMIN OPTION)
grant select any table to sales with admin option;🔑 授权条件(满足其一即可):
-- 示例1:授予sales01查询sales.area表的权限
grant select on sales.area to sales01;
-- 示例2:授予权限并允许传递管理(带GRANT OPTION)
grant select on sales.area to sales01 with grant option;⚠️ 注意:收回后立即生效,需确认不影响业务运行。
-- 收回系统权限(查询所有表)
revoke select any table from sales;
-- 收回对象权限(查询sales.area表)
revoke select on sales.area from sales01;角色是 “权限的集合”,通过给用户分配角色,可避免重复授予单个权限,大幅提升管理效率。
角色名称 | 权限描述 |
|---|---|
DBA | 未开三权分立:几乎所有权限(除 SHUTDOWN);开启后:无审计 / 安全权限,仅基础 DDL 权限 |
AUDIT_ADMIN | 所有审计相关权限(创建 / 删除 / 启用审计策略等) |
SECURITY_ADMIN | 所有安全相关权限(管理用户 / 角色 / 权限等) |
SYSDBA/SYSOPER | 仅拥有SHUTDOWN权限 |
PUBLIC | 所有用户默认拥有,默认无权限;>⚠️ 谨慎授权(可能导致数据泄露) |
CONNECT | 拥有CREATE SESSION权限(用户登录必需) |
RESOURCE | 拥有创建表、序列、存储过程、触发器的权限 |
通过CREATE ROLE创建,再关联权限,最后授予用户。
-- 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(表名) |
-- 查看所有用户的用户名、账号状态、创建时间
select username, account_status, created from dba_users;
-- 查看自定义角色(SYS_MAINTAINED='NO')
select * from dba_roles where SYS_MAINTAINED='NO';