Oracle 数据库中的用户
Oracle 数据库中的 用户(User) 是用于访问数据库对象(表、视图、存储过程等)的实体。不同的用户有不同的权限和角色,主要分为 系统用户、默认用户、自定义用户 三大类。
1. Oracle 系统用户(System Users)
Oracle 预定义了一些系统用户,主要用于数据库管理和维护,常见的有:
| 用户名 | 作用 |
|---|---|
| SYS | 最高权限的 DBA 用户,拥有 SYSDBA 权限,管理数据字典,存放核心系统对象(如 v$ 视图)。 |
| SYSTEM | 拥有 DBA 权限,主要用于管理数据库组件和管理用户,但比 SYS 权限稍低。 |
| SYSBACKUP | 专门用于数据库备份和恢复。 |
| SYSDG | 专门用于 Data Guard 相关操作。 |
| SYSKM | 专门用于加密管理(TDE - 透明数据加密)。 |
| DBSNMP | 供 Oracle Enterprise Manager(OEM)用于监控数据库。 |
| OUTLN | 用于存储 SQL 执行计划的轮廓(用于性能优化)。 |
| GSMADMIN_INTERNAL | 主要用于 Grid 组件管理。 |
| DIP | 供目录集成(LDAP 相关)服务使用。 |
🔹 注意:
SYS用户拥有最高权限 (超级管理员),一般不建议在业务中直接使用,可以使用SYSTEM或其他 DBA 账户来管理数据库。SYS下的表、视图等对象通常以SYS.作为前缀,如SYS.DUAL。
2. Oracle 默认用户(Predefined Users)
Oracle 预定义了一些默认用户,这些用户在安装 Oracle 时可能会创建,具体取决于数据库版本和组件:
| 用户名 | 作用 |
|---|---|
| SCOTT | Oracle 经典示例用户,默认密码 tiger,包含 EMP、DEPT 等测试表。 |
| HR | Human Resources 示例用户,包含 EMPLOYEES、DEPARTMENTS 表,演示 HR 管理。 |
| OE | Order Entry 示例用户,模拟订单管理系统。 |
| SH | Sales History 示例用户,包含销售数据。 |
| PM | Product Media 示例用户,演示产品管理。 |
| IX | Internet Example 示例用户,模拟电商数据库。 |
| APEX_XXXX | Oracle APEX 相关的用户(APEX_050000 等)。 |
| ORDDATA | 供 Oracle Multimedia 使用。 |
| MDSYS | 用于 Oracle Spatial(空间数据存储)。 |
| CTXSYS | 供 Oracle Text 使用(全文搜索相关)。 |
| XDB | 供 XML Database 使用,处理 XML 存储。 |
| WMSYS | 用于 Oracle Workspace Manager(管理多版本数据)。 |
| ANONYMOUS | 用于 Oracle HTTP Server 处理匿名访问。 |
| OLAPSYS | 用于 Oracle OLAP 组件。 |
| ORDPLUGINS | Oracle Multimedia 相关插件用户。 |
🔹 注意:
- 这些默认用户在某些安装环境下可能默认被锁定,可以用
ALTER USER 用户名 ACCOUNT UNLOCK;解锁。 - 一般不要使用这些账户存放业务数据,因为可能在数据库升级或补丁更新时被影响。
3. 自定义用户(User-created Users)
自定义用户是 DBA 或开发人员手动创建的用户,通常用于存放业务数据。例如:
sql复制编辑CREATE USER myapp IDENTIFIED BY mypassword;
GRANT CONNECT, RESOURCE TO myapp;
myapp是自定义用户。- 需要分配权限(如
CONNECT、RESOURCE)。
4. 如何查看数据库中的所有用户?
方法 1:查询 ALL_USERS 视图
列出所有用户(包括系统用户和应用用户):
sql复制编辑
SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME;
方法 2:查询 DBA_USERS
如果有 DBA 权限,可以查看所有数据库用户的详细信息:
sql复制编辑
SELECT USERNAME, ACCOUNT_STATUS, CREATED FROM DBA_USERS ORDER BY CREATED DESC;
常见的 ACCOUNT_STATUS 状态:
OPEN- 账户可用LOCKED- 账户被锁定EXPIRED- 账户密码过期EXPIRED & LOCKED- 密码过期且账户被锁定
方法 3:查询当前用户
sql复制编辑
SELECT USER FROM DUAL;
5. 创建、修改和删除用户
创建用户
sql复制编辑CREATE USER test_user IDENTIFIED BY test123;
GRANT CONNECT, RESOURCE TO test_user;
ALTER USER test_user QUOTA UNLIMITED ON USERS;
修改用户密码
sql复制编辑
ALTER USER test_user IDENTIFIED BY newpassword;
锁定用户
sql复制编辑
ALTER USER test_user ACCOUNT LOCK;
删除用户
sql复制编辑
DROP USER test_user CASCADE;
CASCADE 选项用于删除用户的所有对象(表、视图等)。
6. 用户与 Schema 的关系
在 Oracle 中,用户(User)= Schema(模式):
- 每个用户都是一个 Schema,默认 Schema 名与用户相同。
- Schema 只是对象的容器,如表、视图、索引等。
例如:
sql复制编辑CREATE USER sales IDENTIFIED BY sales123;
GRANT CONNECT, RESOURCE TO sales;
sales 用户就等于 sales Schema,创建的表默认存放在 sales 这个 Schema 中:
sql复制编辑
CREATE TABLE sales.orders (id NUMBER, order_date DATE);
如果 SCOTT 用户要访问 sales.orders,需要:
sql复制编辑
SELECT * FROM sales.orders;
总结
- 系统用户(如
SYS、SYSTEM)负责数据库管理,SYS是最高权限的用户。 - 默认用户(如
SCOTT、HR)用于示例数据或数据库功能组件,某些用户默认被锁定。 - 自定义用户 是 DBA 或开发者创建的业务用户,需要手动授予权限。
- 用户与 Schema 是一一对应的,用户就是 Schema。
建议:
- 业务数据尽量 使用自定义用户,不要存放在
SYSTEM或SYS用户下。 - 避免使用默认用户(如 SCOTT)存放正式数据,可能会导致安全隐患。
