在Linux(如Oracle Linux、CentOS)上管理Oracle用户前,需先完成操作系统级的基础配置,确保Oracle数据库服务正常运行且具备管理权限。
Oracle数据库要求使用专用操作系统用户(而非root)运行,以提升安全性。通常创建名为oracle的用户及同名组:
# 创建oracle组(若未存在)
sudo groupadd oinstall
sudo groupadd dba
# 创建oracle用户,指定主组为oinstall、附加组为dba
sudo useradd -g oinstall -G dba oracle
# 设置oracle用户密码(需符合复杂度要求)
sudo passwd oracle
切换至oracle用户,编辑其shell配置文件(如~/.bash_profile),添加Oracle环境变量:
su - oracle
echo "export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1" >> ~/.bash_profile # 替换为实际ORACLE_HOME路径
echo "export ORACLE_SID=orcl" >> ~/.bash_profile # 替换为实际数据库SID
echo "export PATH=\$PATH:\$ORACLE_HOME/bin" >> ~/.bash_profile
source ~/.bash_profile # 使配置立即生效
使用oracle用户启动Oracle监听及数据库服务:
lsnrctl start # 启动监听
sqlplus / as sysdba # 以sysdba身份登录数据库
SQL> startup # 启动数据库(若未运行)
SQL> exit
以上步骤完成后,即可通过oracle用户管理Oracle数据库中的用户。
Oracle用户管理包括创建、修改、删除、权限控制四大类操作,均需通过SQL*Plus或Oracle SQL Developer等工具以管理员身份执行。
使用CREATE USER语句创建用户,需指定用户名、密码,并可选设置默认表空间、临时表空间及配额(存储空间限制):
-- 基本创建(无表空间设置,用户无法存储数据)
CREATE USER new_user IDENTIFIED BY StrongPassword123;
-- 完整创建(推荐:指定表空间及配额)
CREATE USER new_user IDENTIFIED BY StrongPassword123
DEFAULT TABLESPACE users -- 默认表空间(存储用户对象,如表、索引)
TEMPORARY TABLESPACE temp -- 临时表空间(存储排序、临时表等数据)
QUOTA 50M ON users -- 默认表空间配额(50MB,可根据需求调整)
QUOTA UNLIMITED ON temp; -- 临时表空间无限制
使用ALTER USER语句修改密码(需管理员权限或用户自行修改):
-- 管理员修改用户密码
ALTER USER new_user IDENTIFIED BY NewStrongPassword456;
-- 用户自行修改密码(需已知原密码)
CONN new_user/old_password
ALTER USER new_user IDENTIFIED BY NewStrongPassword456;
ALTER USER new_user ACCOUNT LOCK;
ALTER USER new_user ACCOUNT UNLOCK;
若需调整用户的存储位置,可使用以下命令:
-- 更改默认表空间
ALTER USER new_user DEFAULT TABLESPACE new_tablespace;
-- 更改临时表空间
ALTER USER new_user TEMPORARY TABLESPACE new_temp_tablespace;
使用DROP USER语句删除用户,若用户拥有数据库对象(如表、视图),需添加CASCADE参数彻底删除:
-- 删除无对象的空用户
DROP USER new_user;
-- 删除有对象的用户(彻底清除所有关联对象)
DROP USER new_user CASCADE;
Oracle权限分为系统权限(如创建会话、建表)和对象权限(如查询、修改特定表),可通过角色(Role)简化权限分配。
授予权限:使用GRANT语句授予单个或多个系统权限(需管理员权限):
-- 授予普通用户基本权限(CONNECT用于登录,RESOURCE用于创建对象)
GRANT CONNECT, RESOURCE TO new_user;
-- 授予DBA权限(最高权限,谨慎使用)
GRANT DBA TO new_user;
-- 授予带传递权限的系统权限(被授权者可进一步授予他人)
GRANT CONNECT, RESOURCE TO new_user WITH ADMIN OPTION;
撤销权限:使用REVOKE语句撤销系统权限:
-- 撤销CONNECT权限
REVOKE CONNECT FROM new_user;
-- 撤销带传递的权限(不影响被授权者的传递权限)
REVOKE RESOURCE FROM new_user;
授予权限:授予用户对特定对象(如表、视图)的操作权限(如SELECT、INSERT):
-- 授予查询scott.emp表的权限
GRANT SELECT ON scott.emp TO new_user;
-- 授予插入、更新scott.emp表的权限
GRANT INSERT, UPDATE ON scott.emp TO new_user;
-- 授予带传递权限的对象权限(被授权者可进一步授予他人)
GRANT SELECT ON scott.emp TO new_user WITH GRANT OPTION;
撤销权限:撤销用户对特定对象的操作权限:
-- 撤销查询scott.emp表的权限
REVOKE SELECT ON scott.emp FROM new_user;
-- 撤销带传递的权限(不影响被授权者的传递权限)
REVOKE INSERT, UPDATE ON scott.emp FROM new_user;
角色是权限的集合,可简化权限分配(如Oracle内置的CONNECT、RESOURCE角色)。也可自定义角色:
CREATE ROLE hr_manager;
GRANT CREATE SESSION, CREATE TABLE, SELECT ON scott.emp TO hr_manager;
GRANT hr_manager TO new_user;
REVOKE hr_manager FROM new_user;
通过以下SQL语句查看用户的权限信息,便于审计和管理:
-- 查看系统权限(用户直接或通过角色获得的系统权限)
SELECT * FROM USER_SYS_PRIVS;
-- 查看角色权限(用户通过角色获得的系统权限)
SELECT * FROM USER_ROLE_PRIVS;
-- 查看对象权限(用户对特定对象的操作权限)
SELECT * FROM USER_TAB_PRIVS;
以上操作覆盖了Linux环境下Oracle用户管理的核心场景,遵循最小权限原则(仅授予用户完成任务所需的最少权限),可有效提升数据库安全性[1,2,4,5,6,7,8,9,10,11]。