【Oracle入门到删库跑路-08】核心技能:用户和权限管理

用户管理

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数据库中的用户和权限管理,包括用户管理、角色管理、系统权限、对象权限、审计功能和配置文件管理。掌握这些安全相关的技能对于保护数据库安全和实现精细化权限控制非常重要。

练习题

  1. 创建一个新用户,设置默认表空间和配额,并为其分配CONNECT和RESOURCE角色
  2. 创建一个角色,授予该角色对employees表的SELECT、INSERT、UPDATE权限,然后将角色分配给用户
  3. 为特定用户授予对某个表的列级权限,只允许其更新特定列
  4. 创建一个配置文件,限制用户同时连接数和密码生命周期,并将其分配给用户
  5. 启用审计功能,跟踪特定用户的登录和重要表的操作
  6. 创建一个安全的配置文件,实现强密码策略和登录失败锁定机制
相关推荐
我科绝伦(Huanhuan Zhou)1 小时前
Oracle控制文件、SCN与检查点机制深度解析及数据库初始化原理
运维·数据库·oracle
尋有緣1 小时前
力扣1327-列出指定时间段内所有的下单产品
leetcode·oracle·数据库开发
cui_win2 小时前
MySQL max_connections连接数配置没生效,最终靠改这个参数解决
数据库·mysql
爱吃面条的猿2 小时前
DBeaver 全能数据库管理工具的使用配置
数据库·dbeaver
杨云龙UP2 小时前
从0到可落地:Oracle RMAN异地NFS备份标准脚本(多实例通用)
linux·运维·数据库·oracle
TDengine (老段)2 小时前
网络延时对 TDengine TSDB 写入性能的影响:实验解析与实践建议
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
古城小栈2 小时前
吃透Cron表达式
linux·服务器·数据库
mpHH2 小时前
ivorysql 源码分析-双port兼容
数据库·学习·postgresql