5.4 安全管理
5.4.1 数据库系统安全概述
数据库系统安全指为数据库系统采取安全保护措施,防止数据库系统及其数据遭到破坏、篡改和泄漏。
数据库安全:采取各种安全措施对数据库及其相关文件进行保护,以确保数据库的数据安全。
典型的数据库安全问题如下
- 黑客利用系统漏洞,攻击系统
- 内部人员非法地泄露、篡改数据。
- 系统运维人员操作失误
- 系统软硬件故障
- 意外灾害事件
措施
-
针对数据库系统的运维机构及其管理人员,应制定严格管理制度,并在运营管理中实施规范的操作流程和权限控制;
-
针对数据库用户,可以采取用户身份认证、权限控制、数据加密等
-
针对意外的灾害事件,可以采取高可靠性系统容错技术、数据备份与恢复方法、系统异地容灾等技术
5.4.2 数据库系统安全模型
其安全体系模型如图,其中最基本的安全管理技术手段就是DBMS提供的用户授权与访问权限控制功能
数据库存取控制安全模型
5.4.3 用户管理
1.用户创建
只有特定权限的用户可以创建其他用户,如系统管理员用户或超级用户。
基本格式
CREATE USER 用户账号名 WITH [ options ];
options如下:
LOGIN | NOLOGIN 登录权限
SUPERUSER | NOSUPERUSER 超级用户
CREATEDB | NOCREATEDB: 创建数据库的权限
CREATEROLE | NOCREATEROLE 创建角色的权限
INHERIT | NOINHERIT 继承角色的权限
REPLICATION | NOREPLICATION 复制的权限
CONNECTION LIMIT connlimit:指定创建的用户访问数据库连接的数目限制。
BYPASSRLS | NOBYPASSRLS:指定创建的用户是否具有绕过行安全策略权限。
[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password':指定创建的用户密码是否需要加密。
VALID UNTIL 'timestamp':指定创建的用户密码失效时间。
IN ROLE role_name [, ...] :指定创建的用户成为哪些角色的成员。
【例】创建一个新用户
CREATE USER "userA" WITH
PASSWORD '123456'
LOGIN
NOSUPERUSER
NOCREATEDB
NOCREATEROLE
INHERIT
NOREPLICATION
CONNECTION LIMIT -1; //数据库连接数不受限制
2.用户修改
在数据库系统中,我们还可对数据库已有用户进行属性修改
基本格式
ALTER USER <用户名> [ [ WITH ] option [ ... ] ]; 修改用户的属性
ALTER USER <用户名> RENAME TO <新用户名>; 修改用户的名称
ALTER USER <用户名> SET <参数项> { TO | = } { value | DEFAULT }; 修改用户的参数值
ALTER USER <用户名> RESET <参数项>; 重置用户参数值
【例:修改用户的属性】
ALTER USER "userA"
PASSWORD 'gres123'
CONNECTION LIMIT 10;
3.用户删除
基本格式
DROP USER <用户名>;
DROP USER userA;
5.4.4 权限管理
用户的数据库对象访问权限由系统管理员进行授予。若没有赋予权限,用户仅仅只能进行基本访问操作。
不同用户有不同的权限
系统管理员(超级用户)在数据库服务器系统中具有最高权限,可以对其他角色或用户进行权限分配和管理。
数据库对象拥有者对其所拥有的对象具有全部权限,普通用户(user)只具有被赋予的数据库访问操作权限。
授权格式
授予权限、撤回权限、拒绝权限
GRANT <权限名> ON <对象名> TO {数据库用户名|用户角色名};
REVOKE <权限名> ON <对象名> FROM {数据库用户名|用户角色名};
DENY <权限名> ON <对象名> TO {数据库用户名|用户角色名};
【例】工程项目管理系统中,赋予员工用户对表的读取数据权限
GRANT SELECT ON Department TO "userA";
GRANT SELECT ON Employee TO "userA";
GRANT SELECT ON Project TO "userA";
GRANT SELECT ON Assignment TO "userA";
5.4.5 角色管理
将一组具有相同权限的用户定义为角色(Role),方便管理。
基本格式
CREATE ROLE <角色名> [ [ WITH ] option [ ... ] ]; 创建角色
ALTER ROLE <角色名> [ [ WITH ] option [ ... ] ]; 修改角色属性
ALTER ROLE <角色名> RENAME TO <新角色名>; 修改角色名称
ALTER ROLE <角色名> SET <参数项> { TO | = } { value | DEFAULT }; 修改角色参数值
ALTER ROLE <角色名> RESET <参数项>; 复位角色参数值
DROP ROLE <角色名>; 删除指定角色
option为角色属性
SUPERUSER | NOSUPERUSER:指定创建的角色是否为超级用户。
CREATEDB | NOCREATEDB:指定创建的角色是否具有创建数据库的权限。
CREATEROLE | NOCREATEROLE:指定创建的用户是否具有创建角色的权限。
INHERIT | NOINHERIT:指定创建的角色是否具有继承父角色的权限。
LOGIN | NOLOGIN:指定创建的角色是否具有登录权限。
REPLICATION | NOREPLICATION:指定创建的角色是否具有复制权限。
BYPASSRLS | NOBYPASSRLS:指定创建的角色是否具有绕过行安全策略权限。
CONNECTION LIMIT connlimit:指定创建的角色访问数据库连接的数目限制。
[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password':指定创建的角色密码是否需要加密。
VALID UNTIL 'timestamp':指定创建的角色密码失效时间。
IN ROLE role_name [, ...] :指定创建的角色成为哪些角色的成员。
ROLE role_name [, ...] :指定创建的角色成为哪些角色的组角色。
USER role_name [, ...] :指定创建的角色成为哪些用户的角色。
【例】创建角色Role_Manager
CREATE ROLE "Role_Manager" WITH
LOGIN
NOSUPERUSER
NOCREATEDB
NOCREATEROLE
INHERIT
NOREPLICATION
CONNECTION LIMIT -1;
再给Role_Manager角色赋予操作数据库中的表的权限
GRANT SELECT,INSERT,UPDATE,DELETE ON Department TO "Role_Manager";
GRANT SELECT,INSERT,UPDATE,DELETE ON Employee TO "Role_Manager";
GRANT SELECT,INSERT,UPDATE,DELETE ON Project TO "Role_Manager";
GRANT SELECT,INSERT,UPDATE,DELETE ON Assignment TO "Role_Manager";
---------------------------
“朝着一个既定的方向去努力,就算没有天赋,在时间的积累下应该也能稍稍有点成就吧。”