第4章 数据库安全性

对象与操作类型
对象类型 对象 操作类型
数据库
模式
模式 CREATE SCHEMA
基本表 CREATE TABLE, ALTER TABLE
视图 CREATE VIEW
索引 CREATE INDEX
数据 基本表和视图 SELECT, INSERT, UPDATE, DELETE,
REFERENCES,
ALL PRIVILEGES
属性列 SELECT, INSERT, UPDATE,
REFERENCES,
ALL PRIVILEGES

1 GRANT

GRANT <权限> [, <权限> ] ... 
ON <对象类型> <对象名> [, <对象类型> <对象名> ] ...
TO <用户> [ , <用户> ] ... 
[ WITH GRANT OPTION ];
  • WITH GRANT OPTION:被授权者可继续将自己接受到的权限授权给其他用户

2 REVOKE

REVOKE <权限> [, <权限>] ... 
ON <对象名> [, <对象名>] ...
FROM <用户> [, <用户>] ... [CASCADE | RESTRICT];
  • CASCADE 表示要进行权限的 ‘连锁回收’
  • RESTRICT 表示:只有当不存在连锁回收问题时,才能从指定用户那里回收权限

3 CREATE USER

-- CREATE USER <username> [WITH] [DBA | RESOURCE | CONNECT]; 实际上各个数据库相差甚远

CREATE USER username IDENTIFIED BY ‘password’;
数据库角色与权限
拥有的权限 可否执行的操作
CREATE
USER
CREATE
SCHEMA
CREATE
TABLE
登录数据库,执行
数据查询和操纵
DBA 可以 可以 可以 可以
RESOURCE 不可以 不可以 可以 可以
CONNECT 不可以 不可以 不可以 可以,但必须拥有
相应权限

4 数据库角色

CREATE ROLE rolename [, rolename] ...;

数据库角色:被命名的一组与数据库操作相关的权限

  • 角色是权限的集合
  • 可以为一组具有相同权限的用户创建一个角色
  • 简化授权的过程

【例】 通过角色来实现将一组权限授予一个用户

  • 首先创建一个角色 R1
CREATE ROLE R1;
  • 然后使用 GRANT 语句,使角色 R1 拥有 Student 表的 SELECTUPDATEINSERT 权限
GRANT SELECT, UPDATE, INSERT ON TABLE Student TO R1;
  • 将这个角色的授予王平,张明,赵玲。使他们具有角色 R1 所包含的全部权限:
GRANT R1 TO 王平, 张明, 赵玲;
  • 可以一次性通过 R1 来回收王平的这 3 个权限
REVOKE R1 FROM 王平;

5 视图机制

先创建视图,再把对视图操作的权限授予用户

6 AUDIT(审计)

启用一个专用的审计日志(Audit Log)将用户对数据库的所有操作记录在上面

  • AUDIT 语句:设置审计功能
  • NOAUDIT 语句:取消审计功能
AUDIT ALTER, UPDATE ON SC;

标题:第4章 数据库安全性

作者:Zwing

创建于:2026-08-08 19:03:00

更新于:2026-08-08 12:06:24

链接:https://zanytriumph.github.io/posts/数据库安全性.html

版权声明:本文章采用 CC BY-NC-SA 4.0 进行许可