尽管Oracle数据库提供了诸如Oracle Enterprise Manager (OEM)、Oracle SQL Developer等强大的图形化管理工具,但在某些环境下(如纯命令行服务器、资源受限或仅安装了数据库软件核心组件时),我们可能不得不直接使用SQL*Plus等命令行工具进行数据库管理。查看和管理数据库用户是DBA的日常核心工作,以下将详细介绍在没有图形化工具的情况下如何完成这些任务。
一、连接数据库
您需要使用具有足够权限的账户(如SYS、SYSTEM或具有DBA角色的用户)通过SQL*Plus连接到数据库实例。
`sql
sqlplus / as sysdba
-- 或
sqlplus username/password@service_name as sysdba`
二、查看数据库用户
1. 查看所有用户的基本信息
主要查询数据字典视图 DBA_USERS。该视图包含数据库中所有用户的详细信息。
SELECT username, userid, accountstatus, created, defaulttablespace, temporarytablespace
FROM dba_users
ORDER BY username;
- USERNAME: 用户名。
- ACCOUNT_STATUS: 账户状态,如
OPEN(开放)、LOCKED(锁定)、EXPIRED(密码过期)等。 - DEFAULT_TABLESPACE: 默认表空间。
- TEMPORARY_TABLESPACE: 临时表空间。
2. 查看当前会话用户
`sql
SHOW USER;
-- 或
SELECT USER FROM dual;`
3. 查看用户拥有的系统权限
`sql
SELECT * FROM dbasysprivs WHERE grantee = 'USERNAME';
-- 将 USERNAME 替换为具体的用户名`
4. 查看用户拥有的对象权限
SELECT * FROM dbatabprivs WHERE grantee = 'USERNAME';
5. 查看用户角色
SELECT grantedrole, adminoption, defaultrole FROM dbarole_privs WHERE grantee = 'USERNAME';
6. 查看用户的表空间配额
`sql
SELECT tablespacename, bytes, maxbytes FROM dbatsquotas WHERE username = 'USERNAME';
-- MAX_BYTES 为 -1 表示无限制。`
三、管理数据库用户
1. 创建新用户
CREATE USER new_user IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 100M ON users;
2. 修改用户属性
- 修改密码:`sql
ALTER USER username IDENTIFIED BY new_password;`
- 解锁/锁定账户:`sql
ALTER USER username ACCOUNT UNLOCK; -- 解锁
ALTER USER username ACCOUNT LOCK; -- 锁定`
- 修改默认表空间:`sql
ALTER USER username DEFAULT TABLESPACE new_tablespace;`
- 修改表空间配额:`sql
ALTER USER username QUOTA 500M ON tablespacename;
ALTER USER username QUOTA 0 ON tablespacename; -- 取消配额`
3. 授予与撤销权限
- 授予系统权限(如创建会话):`sql
GRANT CREATE SESSION TO username;`
- 授予对象权限(如表上的SELECT权限):`sql
GRANT SELECT ON schema.table_name TO username;`
- 授予角色:`sql
GRANT CONNECT, RESOURCE TO username;`
- 撤销权限或角色: 使用
REVOKE命令,语法与GRANT类似。
4. 删除用户
- 如果用户不拥有任何对象:`sql
DROP USER username;`
- 如果用户拥有对象,需要级联删除:`sql
DROP USER username CASCADE;
-- 谨慎使用!这会删除该用户及其拥有的所有数据库对象。`
四、关键数据字典视图
DBA_USERS: 所有用户信息。ALL_USERS: 当前用户可见的所有用户。USER_USERS: 当前用户的信息。DBA<em>SYS</em>PRIVS: 系统权限授予信息。DBA<em>TAB</em>PRIVS: 对象权限授予信息。DBA<em>ROLE</em>PRIVS: 角色授予信息。DBA<em>TS</em>QUOTAS: 表空间配额信息。DBA<em>PROFILES与USER</em>RESOURCE_LIMITS: 查看用户资源配置文件(Profile)和限制。
五、实践建议与注意事项
- 谨慎操作:在生成环境执行删除、修改权限等操作前,务必确认无误。
- 使用脚本:对于重复性任务,可以将常用查询保存为SQL脚本文件,方便调用。
- 结果格式化:在SQL*Plus中,可以使用
SET LINESIZE、SET PAGESIZE、COLUMN ... FORMAT等命令让查询结果更易读。 - 权限最小化原则:授予用户完成工作所必需的最小权限集合,以增强安全性。
- 定期审计:定期检查用户状态、权限和配额,清理无用账户。
通过熟练运用上述SQL命令和数据字典视图,即使在没有图形化管理工具的纯命令行环境中,数据库管理员也能高效、精准地完成Oracle数据库用户的查看与管理工作。这不仅是必备技能,也能帮助DBA更深入地理解Oracle数据库的权限与安全模型。