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)存放正式数据,可能会导致安全隐患。