Oracle在CentOS上的用户权限管理分为操作系统层面(保障Oracle软件运行安全)和数据库层面(控制用户对数据库的访问与操作)两部分,以下是具体操作流程:
操作系统层面的权限管理主要是创建专用用户/组、设置目录权限及系统参数,确保Oracle数据库运行的安全性与稳定性。
Oracle建议使用专用用户(如oracle)和组(如oinstall、dba)管理数据库,避免使用root用户。
# 创建oinstall组(安装Oracle软件的用户组)
groupadd oinstall
# 创建dba组(具有数据库管理权限的用户组)
groupadd dba
# 创建oracle用户,加入oinstall和dba组
useradd -g oinstall -G dba oracle
# 设置oracle用户密码
passwd oracle
说明:oinstall组用于Oracle软件的安装与维护,dba组用于数据库的管理(如启动/停止数据库)。
Oracle软件及相关目录(如安装目录、数据文件目录、配置目录)的权限必须归属于oracle用户和oinstall组,避免权限泄露。
# 假设Oracle安装目录为/opt/oracle,数据文件目录为/opt/oracle/oradata
mkdir -p /opt/oracle /opt/oracle/oradata
# 设置目录所有者为oracle:oinstall,权限为775(所有者与组有读写执行权限,其他用户有读执行权限)
chown -R oracle:oinstall /opt/oracle /opt/oracle/oradata
chmod -R 775 /opt/oracle /opt/oracle/oradata
说明:若存在监听器配置目录(如/u01/app/oracle/network/admin),需同步设置权限:
chown -R oracle:oinstall /u01/app/oracle/network/admin
chmod -R 775 /u01/app/oracle/network/admin
若CentOS启用了SELinux(默认为enforcing模式),需设置正确的SELinux上下文,避免Oracle无法访问目录。
# 参考Oracle官方文档,设置Oracle目录的SELinux上下文
semanage fcontext -a -t oracle_db_t "/opt/oracle(/.*)?"
restorecon -Rv /opt/oracle
说明:若未安装semanage工具,可通过yum install policycoreutils-python-utils安装。
Oracle对系统内核参数有特定要求,需修改/etc/sysctl.conf文件并生效:
# 编辑sysctl.conf文件
vi /etc/sysctl.conf
# 追加以下参数(根据Oracle版本调整)
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 2147483648
net.ipv4.ip_local_port_range = 9000 65500
# 生效配置
sysctl -p
说明:这些参数用于优化系统资源(如共享内存、文件句柄数),确保Oracle正常运行。
切换至oracle用户,编辑~/.bash_profile文件,添加Oracle环境变量:
su - oracle
vi ~/.bash_profile
# 追加以下内容(根据实际安装路径调整)
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
# 生效环境变量
source ~/.bash_profile
说明:环境变量用于Oracle客户端的正常连接与操作。
数据库层面的权限管理通过SQL*Plus或Oracle SQL Developer等工具执行,主要分为系统权限(全局操作权限)和对象权限(特定对象访问权限)。
权限管理需具有SYSDBA或相应权限的用户(如SYS、SYSTEM)执行:
su - oracle
sqlplus / as sysdba
说明:/ as sysdba表示以SYSDBA身份登录,无需输入密码(需操作系统用户属于dba组)。
创建用户时需指定默认表空间(存储用户数据的表空间)、临时表空间(存储排序等临时数据的表空间),初始状态下用户无任何权限。
-- 创建用户itbank,密码为123456,默认表空间为itbank_tbs,临时表空间为temp
CREATE USER itbank IDENTIFIED BY 123456
DEFAULT TABLESPACE itbank_tbs
TEMPORARY TABLESPACE temp;
说明:若未提前创建表空间,需先执行CREATE TABLESPACE语句(如CREATE TABLESPACE itbank_tbs DATAFILE '/opt/oracle/oradata/ORCL/itbank.dbf' SIZE 100M AUTOEXTEND ON;)。
用户创建后需授予相应权限才能访问数据库:
-- 授予connect(连接数据库)、resource(创建对象)、dba(系统管理)权限
GRANT CONNECT, RESOURCE, DBA TO itbank;
常用系统权限:CREATE SESSION(连接数据库)、CREATE TABLE(创建表)、UNLIMITED TABLESPACE(无限制使用表空间)。-- 授予itbank用户对scott.emp表的查询、插入、更新权限
GRANT SELECT, INSERT, UPDATE ON scott.emp TO itbank;
常用对象权限:SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)、ALL(所有权限)。若需收回用户权限,可使用REVOKE语句:
-- 撤销itbank用户的CONNECT、RESOURCE系统权限
REVOKE CONNECT, RESOURCE FROM itbank;
-- 撤销itbank用户对scott.emp表的SELECT、INSERT、UPDATE对象权限
REVOKE SELECT, INSERT, UPDATE ON scott.emp FROM itbank;
若用户不再使用,可删除用户及其所有对象(如表、视图):
-- 删除itbank用户及其所有对象(CASCADE为级联删除)
DROP USER itbank CASCADE;
CONNECT、RESOURCE权限,无需DBA权限)。custom_role),将权限授予角色后再将角色授予用户,简化权限管理。-- 创建角色
CREATE ROLE custom_role;
-- 授予角色权限
GRANT SELECT, INSERT ON scott.emp TO custom_role;
-- 授予用户角色
GRANT custom_role TO itbank;
DBA_SYS_PRIVS(系统权限)、DBA_TAB_PRIVS(对象权限)视图查看用户权限,及时回收不必要的权限。-- 查看itbank用户的系统权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ITBANK';
-- 查看itbank用户的对象权限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'ITBANK';
通过以上步骤,可实现Oracle在CentOS上的用户权限管理,保障数据库的安全性与可用性。