用户管理
Oracle数据库中的用户是访问数据库的账户,每个用户都有自己的用户名和密码。
创建用户
sql
-- 创建基本用户
CREATE USER john IDENTIFIED BY password123;
-- 创建具有更多属性的用户
CREATE USER alice IDENTIFIED BY securepass
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 100M ON users
ACCOUNT UNLOCK;
-- 创建带有配置文件的用户
CREATE USER bob IDENTIFIED BY pass456
PROFILE app_profile
DEFAULT TABLESPACE data_ts
TEMPORARY TABLESPACE temp_ts
QUOTA UNLIMITED ON data_ts;
修改用户
sql
-- 修改用户密码
ALTER USER john IDENTIFIED BY newpassword;
-- 修改默认表空间
ALTER USER john DEFAULT TABLESPACE users_data;
-- 修改临时表空间
ALTER USER john TEMPORARY TABLESPACE temp_ts;
-- 设置表空间配额
ALTER USER john QUOTA 50M ON users;
ALTER USER john QUOTA UNLIMITED ON users_data;
-- 锁定/解锁用户账户
ALTER USER john ACCOUNT LOCK;
ALTER USER john ACCOUNT UNLOCK;
-- 设置配置文件
ALTER USER john PROFILE secure_profile;
-- 设置密码过期
ALTER USER john PASSWORD EXPIRE;
删除用户
sql
-- 删除用户(不删除对象)
DROP USER john;
-- 删除用户及其所有对象
DROP USER alice CASCADE;
4.2 角色管理
角色是一组权限的集合,可以分配给用户或其他角色,简化权限管理。
预定义角色
Oracle提供了一些预定义的角色:
- CONNECT:允许用户连接到数据库
- RESOURCE:允许用户创建表、序列、过程等对象
- DBA:数据库管理员角色,拥有几乎所有权限
创建角色
sql
-- 创建基本角色
CREATE ROLE app_user;
-- 创建带有密码保护的角色
CREATE ROLE secure_role IDENTIFIED BY role_password;
-- 创建应用程序角色
CREATE ROLE hr_manager;
CREATE ROLE finance_user;
CREATE ROLE it_support;
管理角色
sql
-- 为角色授予权限
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO app_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON employees TO hr_manager;
GRANT SELECT ON salaries TO finance_user;
-- 为角色授予其他角色
GRANT app_user TO hr_manager;
-- 将角色分配给用户
GRANT app_user TO john;
GRANT hr_manager TO alice;
GRANT finance_user TO bob;
-- 设置默认角色
ALTER USER john DEFAULT ROLE app_user;
ALTER USER alice DEFAULT ROLE ALL; -- 所有角色都是默认角色
ALTER USER bob DEFAULT ROLE NONE; -- 没有默认角色
-- 启用角色(需要时手动启用)
SET ROLE secure_role IDENTIFIED BY role_password;
-- 禁用角色
SET ROLE NONE; -- 禁用所有非默认角色
删除角色
sql
-- 删除角色
DROP ROLE app_user;
4.3 系统权限管理
系统权限允许用户执行特定的数据库操作,如创建表、索引等。
常用系统权限
sql
-- 连接相关权限
CREATE SESSION -- 连接到数据库
ALTER SESSION -- 更改会话设置
-- 对象创建权限
CREATE TABLE -- 创建表
CREATE VIEW -- 创建视图
CREATE SEQUENCE -- 创建序列
CREATE PROCEDURE -- 创建存储过程
CREATE TRIGGER -- 创建触发器
CREATE INDEX -- 创建索引
CREATE CLUSTER -- 创建簇
CREATE SYNONYM -- 创建同义词
CREATE DATABASE LINK -- 创建数据库链接
-- 管理权限
ALTER DATABASE -- 修改数据库
ALTER SYSTEM -- 修改系统参数
AUDIT SYSTEM -- 审计系统操作
-- 用户管理权限
CREATE USER -- 创建用户
ALTER USER -- 修改用户
DROP USER -- 删除用户
授予和撤销系统权限
sql
-- 授予系统权限给用户
GRANT CREATE SESSION, CREATE TABLE TO john;
GRANT CREATE PROCEDURE, CREATE TRIGGER TO alice;
-- 授予系统权限给角色
GRANT CREATE VIEW, CREATE SEQUENCE TO app_user;
-- 授予管理员权限
GRANT DBA TO bob;
-- 撤销系统权限
REVOKE CREATE TABLE FROM john;
REVOKE DBA FROM bob;
-- 授予所有权限(谨慎使用)
GRANT ALL PRIVILEGES TO admin_user;
4.4 对象权限管理
对象权限控制用户对特定数据库对象(如表、视图、过程等)的访问。
对象权限类型
sql
-- 表和视图权限
SELECT -- 查询数据
INSERT -- 插入数据
UPDATE -- 更新数据
DELETE -- 删除数据
REFERENCES -- 创建外键引用
ALTER -- 修改表结构
INDEX -- 创建索引
ALL -- 所有权限
-- 过程、函数、包权限
EXECUTE -- 执行程序单元
-- 序列权限
SELECT -- 查询序列当前值
ALTER -- 修改序列
-- 目录权限
READ -- 读取目录中的文件
WRITE -- 写入目录中的文件
授予和撤销对象权限
sql
-- 授予表权限
GRANT SELECT ON employees TO john;
GRANT INSERT, UPDATE ON departments TO alice;
GRANT DELETE ON job_history TO hr_manager;
GRANT ALL ON salaries TO finance_manager;
-- 授予视图权限
GRANT SELECT ON emp_view TO app_user;
-- 授予过程权限
GRANT EXECUTE ON calculate_bonus TO hr_manager;
-- 授予序列权限
GRANT SELECT ON emp_seq TO app_user;
-- 授予列级权限
GRANT UPDATE (salary, commission_pct) ON employees TO hr_manager;
-- 撤销对象权限
REVOKE SELECT ON employees FROM john;
REVOKE INSERT, UPDATE ON departments FROM alice;
REVOKE EXECUTE ON calculate_bonus FROM hr_manager;
-- 授予权限时允许授权给其他用户
GRANT SELECT ON employees TO john WITH GRANT OPTION;
-- 撤销权限及其授予的权限
REVOKE SELECT ON employees FROM john CASCADE;
4.5 审计功能
审计功能用于跟踪和记录数据库中的重要操作。
启用审计
sql
-- 启用标准审计
AUDIT POLICY ora_logon_failures; -- 审计登录失败
-- 审计特定操作
AUDIT CREATE TABLE BY hr;
AUDIT DELETE ANY TABLE BY dba_user;
AUDIT SELECT ON hr.employees BY ACCESS;
-- 审计系统权限
AUDIT CREATE SESSION;
AUDIT ALTER SYSTEM;
-- 审计对象权限
AUDIT SELECT ON hr.employees BY ACCESS;
查看审计记录
sql
-- 查看审计记录
SELECT username, timestamp, action_name, returncode
FROM dba_audit_trail
WHERE timestamp > SYSDATE - 1
ORDER BY timestamp DESC;
-- 查看登录审计
SELECT userid, userhost, timestamp, returncode
FROM dba_audit_session
WHERE timestamp > SYSDATE - 1
ORDER BY timestamp DESC;
-- 查看对象审计
SELECT owner, obj_name, action_name, timestamp, username
FROM dba_audit_object
WHERE timestamp > SYSDATE - 1
ORDER BY timestamp DESC;
管理审计
sql
-- 停止审计
NOAUDIT CREATE TABLE BY hr;
NOAUDIT SELECT ON hr.employees;
-- 删除审计记录
DELETE FROM sys.aud$ WHERE timestamp# < SYSDATE - 30;
-- 查看当前审计设置
SELECT audit_option, success, failure FROM dba_stmt_audit_opts;
SELECT privilege, success, failure FROM dba_priv_audit_opts;
SELECT owner, object_name, object_type, sel, ins, upd, del
FROM dba_obj_audit_opts;
4.6 配置文件管理
配置文件用于限制用户资源使用和密码管理。
创建配置文件
sql
-- 创建基本配置文件
CREATE PROFILE app_profile LIMIT
SESSIONS_PER_USER 5
CPU_PER_SESSION 10000
CPU_PER_CALL 1000
CONNECT_TIME 480
IDLE_TIME 30
LOGICAL_READS_PER_SESSION 1000000
PRIVATE_SGA 100K
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME 365
PASSWORD_REUSE_MAX 5
PASSWORD_VERIFY_FUNCTION verify_function;
-- 创建严格的配置文件
CREATE PROFILE secure_profile LIMIT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1/24 -- 锁定1小时
PASSWORD_LIFE_TIME 60
PASSWORD_GRACE_TIME 5
PASSWORD_REUSE_TIME 365
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_VERIFY_FUNCTION ora12c_strong_verify_function;
管理配置文件
sql
-- 修改配置文件
ALTER PROFILE app_profile LIMIT
SESSIONS_PER_USER 10
CPU_PER_SESSION 20000;
-- 将配置文件分配给用户
ALTER USER john PROFILE app_profile;
-- 查看配置文件信息
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE profile = 'APP_PROFILE'
ORDER BY resource_name;
-- 删除配置文件
DROP PROFILE old_profile;
4.7 本章小结
本章详细介绍了Oracle数据库中的用户和权限管理,包括用户管理、角色管理、系统权限、对象权限、审计功能和配置文件管理。掌握这些安全相关的技能对于保护数据库安全和实现精细化权限控制非常重要。
练习题
- 创建一个新用户,设置默认表空间和配额,并为其分配CONNECT和RESOURCE角色
- 创建一个角色,授予该角色对employees表的SELECT、INSERT、UPDATE权限,然后将角色分配给用户
- 为特定用户授予对某个表的列级权限,只允许其更新特定列
- 创建一个配置文件,限制用户同时连接数和密码生命周期,并将其分配给用户
- 启用审计功能,跟踪特定用户的登录和重要表的操作
- 创建一个安全的配置文件,实现强密码策略和登录失败锁定机制