Oracle数据库权限管理需结合Linux系统权限(操作系统层面)与Oracle数据库权限(数据库层面)两部分,确保数据库安全稳定运行。以下是具体设置步骤:
为隔离Oracle进程与系统用户,需创建专用用户组(oinstall用于安装归属,dba用于数据库管理)及用户(通常为oracle):
groupadd oinstall # 创建安装组
groupadd dba # 创建DBA管理组
useradd -g dba -G oinstall oracle # 创建oracle用户,归属dba和oinstall组
passwd oracle # 设置oracle用户密码
说明:-g指定主组,-G指定附加组,确保oracle用户具备安装与数据库管理权限。
编辑/etc/security/limits.conf,增加oracle用户的进程、文件句柄等限制,避免数据库运行时因资源不足报错:
oracle soft nproc 2047 # 软限制:最多2047个进程
oracle hard nproc 16384 # 硬限制:最多16384个进程
oracle soft nofile 1024 # 软限制:最多1024个打开文件
oracle hard nofile 65536 # 硬限制:最多65536个打开文件
修改后执行sysctl -p使内核参数(如fs.file-max、kernel.shmmax)生效。
Oracle软件目录(如/u01/app/oracle/product/19.0.0/dbhome_1)与数据目录(如/u01/app/oradata)需归属oracle用户及oinstall组,并设置合理权限:
chown -R oracle:oinstall /u01/app/oracle # 递归修改所有者
chmod -R 755 /u01/app/oracle # 设置目录权限(所有者可读写执行,组及其他用户可读执行)
若启用SELinux,需调整上下文:
chcon -R -t oracle_home_t /u01/app/oracle # 设置Oracle主目录上下文
chcon -R -t oracle_db_t /u01/app/oradata # 设置数据目录上下文
为oracle用户添加执行Oracle管理命令的sudo权限(如启动监听、备份),编辑/etc/sudoers(用visudo命令):
oracle ALL=(ALL) NOPASSWD: /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl start,
/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl stop,
/u01/app/oracle/product/19.0.0/dbhome_1/bin/rman target /
说明:允许oracle用户无需密码执行监听器启停、RMAN备份等命令。
使用SYSDBA权限(最高权限)登录,用于创建用户、分配权限:
sqlplus / as 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;
-- 授予WITH GRANT OPTION(允许用户将权限转授他人)
GRANT CREATE TABLE TO test_user WITH GRANT OPTION;
说明:CONNECT权限用于登录数据库,RESOURCE权限用于创建表、序列等对象,DBA权限包含所有系统权限。
对象权限允许用户操作特定数据库对象(如表、视图)。常用权限包括:
-- 授予对HR表的查询、插入权限
GRANT SELECT, INSERT ON hr.employees TO test_user;
-- 授予对SCOTT用户的表的所有权限
GRANT ALL ON scott.emp TO test_user;
-- 授予对视图的所有权限
GRANT ALL ON hr.job_history TO test_user;
角色是权限的集合,可批量分配给用户,减少重复操作:
-- 创建自定义角色
CREATE ROLE hr_manager;
-- 向角色授予权限
GRANT CREATE SESSION, SELECT ON hr.employees, INSERT ON hr.employees TO hr_manager;
-- 将角色授予用户
GRANT hr_manager TO test_user;
Oracle预定义角色包括CONNECT(基本连接)、RESOURCE(开发权限)、DBA(管理员权限),可直接使用。
查看权限:
-- 查看当前用户的系统权限
SELECT * FROM USER_SYS_PRIVS;
-- 查看当前用户的对象权限
SELECT * FROM USER_TAB_PRIVS;
-- 查看指定用户的系统权限(需DBA权限)
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'TEST_USER';
撤销权限:
-- 撤销表的查询权限
REVOKE SELECT ON hr.employees FROM test_user;
-- 撤销角色的权限
REVOKE hr_manager FROM test_user;
orapwd创建的口令文件(如orapwdorcl.ora)需备份,避免丢失导致无法远程登录。AUDIT语句跟踪敏感操作(如删除表),便于追溯:AUDIT DROP TABLE BY test_user BY ACCESS; -- 审计test_user的删除表操作
以上步骤覆盖了Linux环境下Oracle权限管理的核心环节,可根据实际需求调整权限范围,确保数据库安全。