Oracle用户权限管理 #
一、用户管理 #
1.1 创建用户 #
sql
-- 创建用户基本语法
CREATE USER username
IDENTIFIED BY password
[DEFAULT TABLESPACE tablespace_name]
[TEMPORARY TABLESPACE temp_tablespace]
[QUOTA size ON tablespace_name]
[PROFILE profile_name]
[PASSWORD EXPIRE]
[ACCOUNT LOCK|UNLOCK];
-- 创建简单用户
CREATE USER app_user IDENTIFIED BY password123;
-- 创建完整配置用户
CREATE USER app_user
IDENTIFIED BY password123
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 100M ON users
QUOTA 50M ON indx
PROFILE default
PASSWORD EXPIRE
ACCOUNT UNLOCK;
1.2 修改用户 #
sql
-- 修改密码
ALTER USER app_user IDENTIFIED BY new_password;
-- 修改默认表空间
ALTER USER app_user DEFAULT TABLESPACE app_data;
-- 修改配额
ALTER USER app_user QUOTA UNLIMITED ON users;
-- 锁定/解锁用户
ALTER USER app_user ACCOUNT LOCK;
ALTER USER app_user ACCOUNT UNLOCK;
-- 密码过期
ALTER USER app_user PASSWORD EXPIRE;
1.3 删除用户 #
sql
-- 删除用户(无对象)
DROP USER app_user;
-- 删除用户及其所有对象
DROP USER app_user CASCADE;
1.4 查看用户信息 #
sql
-- 查看所有用户
SELECT username, account_status, created, default_tablespace
FROM dba_users;
-- 查看当前用户
SELECT * FROM user_users;
-- 查看用户配额
SELECT * FROM dba_ts_quotas WHERE username = 'APP_USER';
二、权限管理 #
2.1 系统权限 #
sql
-- 常用系统权限
-- CREATE SESSION:连接数据库
-- CREATE TABLE:创建表
-- CREATE VIEW:创建视图
-- CREATE PROCEDURE:创建过程
-- CREATE SEQUENCE:创建序列
-- CREATE TRIGGER:创建触发器
-- CREATE ANY TABLE:创建任意用户的表
-- ALTER ANY TABLE:修改任意用户的表
-- DROP ANY TABLE:删除任意用户的表
-- SELECT ANY TABLE:查询任意表
-- INSERT ANY TABLE:插入任意表
-- UPDATE ANY TABLE:更新任意表
-- DELETE ANY TABLE:删除任意表
-- 授予系统权限
GRANT CREATE SESSION TO app_user;
GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO app_user;
-- 授予所有权限
GRANT ALL PRIVILEGES TO app_user;
-- 回收系统权限
REVOKE CREATE TABLE FROM app_user;
2.2 对象权限 #
sql
-- 对象权限类型
-- SELECT:查询
-- INSERT:插入
-- UPDATE:更新
-- DELETE:删除
-- EXECUTE:执行
-- ALTER:修改
-- INDEX:创建索引
-- REFERENCES:创建外键
-- 授予对象权限
GRANT SELECT ON employees TO app_user;
GRANT SELECT, INSERT, UPDATE ON employees TO app_user;
GRANT ALL ON employees TO app_user;
-- 授予特定列权限
GRANT UPDATE (salary) ON employees TO app_user;
-- 带GRANT OPTION(允许转授)
GRANT SELECT ON employees TO app_user WITH GRANT OPTION;
-- 回收对象权限
REVOKE SELECT ON employees FROM app_user;
2.3 查看权限 #
sql
-- 查看系统权限
SELECT * FROM dba_sys_privs WHERE grantee = 'APP_USER';
SELECT * FROM user_sys_privs;
-- 查看对象权限
SELECT * FROM dba_tab_privs WHERE grantee = 'APP_USER';
SELECT * FROM user_tab_privs;
-- 查看列权限
SELECT * FROM dba_col_privs WHERE grantee = 'APP_USER';
三、角色管理 #
3.1 预定义角色 #
sql
-- 常用预定义角色
-- CONNECT:基本连接权限
-- RESOURCE:开发者权限
-- DBA:数据库管理员权限
-- EXP_FULL_DATABASE:导出数据库
-- IMP_FULL_DATABASE:导入数据库
-- 查看预定义角色
SELECT role FROM dba_roles;
-- 查看角色权限
SELECT * FROM dba_sys_privs WHERE grantee = 'CONNECT';
SELECT * FROM dba_sys_privs WHERE grantee = 'RESOURCE';
3.2 创建自定义角色 #
sql
-- 创建角色
CREATE ROLE app_role;
-- 创建带密码的角色
CREATE ROLE admin_role IDENTIFIED BY password123;
-- 授予角色权限
GRANT CREATE SESSION TO app_role;
GRANT SELECT ON employees TO app_role;
GRANT SELECT ON departments TO app_role;
-- 授予用户角色
GRANT app_role TO app_user;
GRANT app_role TO app_user WITH ADMIN OPTION;
-- 启用角色
SET ROLE app_role;
-- 启用所有角色
SET ROLE ALL;
-- 启用带密码的角色
SET ROLE admin_role IDENTIFIED BY password123;
3.3 管理角色 #
sql
-- 修改角色密码
ALTER ROLE admin_role IDENTIFIED BY new_password;
-- 删除角色密码
ALTER ROLE admin_role NOT IDENTIFIED;
-- 删除角色
DROP ROLE app_role;
-- 查看用户角色
SELECT * FROM dba_role_privs WHERE grantee = 'APP_USER';
-- 查看角色权限
SELECT * FROM role_sys_privs WHERE role = 'APP_ROLE';
SELECT * FROM role_tab_privs WHERE role = 'APP_ROLE';
四、Profile管理 #
4.1 创建Profile #
sql
-- 创建Profile
CREATE PROFILE app_profile LIMIT
SESSIONS_PER_USER 5
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL 30000
CONNECT_TIME 480
IDLE_TIME 60
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL 1000
PRIVATE_SGA 10M
COMPOSITE_LIMIT 5000000
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LIFE_TIME 90
PASSWORD_REUSE_TIME 30
PASSWORD_REUSE_MAX 5
PASSWORD_LOCK_TIME 1
PASSWORD_GRACE_TIME 7
PASSWORD_VERIFY_FUNCTION verify_function;
-- 分配Profile
ALTER USER app_user PROFILE app_profile;
4.2 密码策略 #
sql
-- 密码策略参数
-- FAILED_LOGIN_ATTEMPTS:登录失败次数
-- PASSWORD_LIFE_TIME:密码有效期(天)
-- PASSWORD_REUSE_TIME:密码重用间隔(天)
-- PASSWORD_REUSE_MAX:密码重用次数
-- PASSWORD_LOCK_TIME:锁定时间(天)
-- PASSWORD_GRACE_TIME:宽限期(天)
-- PASSWORD_VERIFY_FUNCTION:密码验证函数
-- 修改密码策略
ALTER PROFILE default LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 180
PASSWORD_LOCK_TIME 1;
五、审计管理 #
5.1 启用审计 #
sql
-- 查看审计状态
SHOW PARAMETER audit;
-- 启用审计
ALTER SYSTEM SET audit_trail = db SCOPE = spfile;
-- 需要重启数据库
-- 审计类型
-- NONE:禁用审计
-- DB:审计记录到数据库
-- OS:审计记录到操作系统文件
-- DB,EXTENDED:详细审计记录
5.2 配置审计 #
sql
-- 审计语句
AUDIT CREATE TABLE BY app_user;
AUDIT INSERT, UPDATE ON employees BY ACCESS;
AUDIT SELECT ON employees WHENEVER SUCCESSFUL;
-- 审计权限
AUDIT CREATE ANY TABLE;
-- 审计对象
AUDIT ALL ON employees;
-- 取消审计
NOAUDIT CREATE TABLE BY app_user;
NOAUDIT INSERT, UPDATE ON employees;
5.3 查看审计记录 #
sql
-- 查看审计记录
SELECT * FROM dba_audit_trail
ORDER BY timestamp DESC;
-- 查看审计配置
SELECT * FROM dba_stmt_audit_opts;
SELECT * FROM dba_obj_audit_opts;
六、总结 #
权限管理要点:
| 权限类型 | 说明 | 示例 |
|---|---|---|
| 系统权限 | 数据库操作权限 | CREATE TABLE |
| 对象权限 | 对象操作权限 | SELECT ON table |
| 角色 | 权限集合 | CONNECT, RESOURCE |
最佳实践:
- 遵循最小权限原则
- 使用角色简化权限管理
- 定期审计权限
- 设置合理的密码策略
- 启用必要的审计
下一步,让我们学习备份与恢复!
最后更新:2026-03-27