在管理Oracle数据库权限前,需先确保Linux系统级权限配置正确,避免因操作系统权限问题导致数据库操作失败。
Oracle数据库需以专用用户(通常为oracle)运行,且隶属于oinstall(安装组)和dba(数据库管理员组)。执行以下命令创建:
sudo groupadd oinstall # 安装组
sudo groupadd dba # 数据库管理员组
sudo useradd -m -g oinstall -G dba oracle # 创建oracle用户,归属oinstall和dba组
sudo passwd oracle # 设置oracle用户密码
Oracle软件目录(如/u01/app/oracle)和数据目录(如/u01/app/oracle/oradata)的权限需严格控制,确保oracle用户有读写执行权限,oinstall/dba组有适当访问权:
# 设置Oracle软件目录权限(所有者:oracle,组:oinstall,权限:750)
sudo chown -R oracle:oinstall /u01/app/oracle
sudo chmod -R 750 /u01/app/oracle
# 设置Oracle数据目录权限(所有者:oracle,组:dba,权限:770)
sudo chown -R oracle:dba /u01/app/oracle/oradata
sudo chmod -R 770 /u01/app/oracle/oradata
# 设置监听器配置文件权限(所有者:oracle,组:oinstall)
sudo chown oracle:oinstall /u01/app/oracle/network/admin/listener.ora
sudo chown oracle:oinstall /u01/app/oracle/network/admin/tnsnames.ora
sudo chmod 644 /u01/app/oracle/network/admin/*.ora
以oracle用户登录,编辑~/.bash_profile文件,添加Oracle环境变量:
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 # Oracle安装路径(根据实际调整)
export ORACLE_SID=orcl # 数据库实例名(根据实际调整)
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
保存后执行source ~/.bash_profile使配置生效。
完成系统级准备后,通过SQL*Plus以SYSDBA身份登录,进行数据库用户与权限管理。
su - oracle # 切换至oracle用户
sqlplus / as sysdba # 以SYSDBA身份登录
创建用户时需指定密码,并分配默认表空间(如USERS)和临时表空间(如TEMP):
CREATE USER test_user IDENTIFIED BY Test@123456
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
系统权限允许用户执行数据库级操作(如创建会话、建表、创建索引等)。常用系统权限包括:
-- 授予基本连接与资源权限
GRANT CONNECT, RESOURCE TO test_user;
-- 授予DBA权限(谨慎使用,拥有最高权限)
GRANT DBA TO test_user;
-- 授予创建会话权限(允许用户连接数据库)
GRANT CREATE SESSION TO test_user;
-- 授予创建表、序列、视图的权限
GRANT CREATE TABLE, CREATE SEQUENCE, CREATE VIEW TO test_user;
对象权限允许用户对特定数据库对象(如表、视图、序列)进行操作(如查询、插入、更新、删除)。语法为:
-- 授予对指定表的查询、插入权限
GRANT SELECT, INSERT ON schema_name.table_name TO test_user;
-- 授予对指定视图的查询权限
GRANT SELECT ON schema_name.view_name TO test_user;
-- 授予对指定序列的SELECT权限(用于获取序列值)
GRANT SELECT ON schema_name.sequence_name TO test_user;
角色是权限的集合,可批量授予用户,减少重复操作。Oracle提供预定义角色(如CONNECT、RESOURCE),也可自定义角色:
-- 创建自定义角色
CREATE ROLE hr_manager;
-- 为角色授予权限
GRANT CREATE SESSION, CREATE TABLE, SELECT ON employees TO hr_manager;
-- 将角色授予用户
GRANT hr_manager TO test_user;
若需收回用户权限,使用REVOKE命令:
-- 撤销表的查询权限
REVOKE SELECT ON employees FROM test_user;
-- 撤销角色
REVOKE hr_manager FROM test_user;
-- 撤销系统权限
REVOKE CREATE SESSION FROM test_user;
通过以下SQL语句查看用户的系统权限、角色权限和对象权限:
-- 查看用户系统权限
SELECT * FROM USER_SYS_PRIVS;
-- 查看用户角色权限
SELECT * FROM USER_ROLE_PRIVS;
-- 查看用户对象权限
SELECT * FROM USER_TAB_PRIVS;
DBA角色)。AUDIT GRANT ANY PRIVILEGE BY SYS;)。通过以上步骤,可在Linux环境下实现对Oracle数据库权限的有效管理,确保数据库安全与稳定运行。