linux

Oracle在Linux上的权限设置方法

小樊
47
2025-09-23 05:24:40
栏目: 云计算

Oracle在Linux上的权限设置方法
在Linux环境中,Oracle数据库的权限设置需兼顾操作系统层面(用户、目录、文件权限)与数据库层面(系统权限、对象权限、角色管理),两者结合才能确保数据库安全稳定运行。

一、操作系统层面权限设置

1. 创建专用Oracle用户及组

Oracle数据库需以专用用户(如oracle)运行,避免使用root等高权限账户。首先创建用户组(oinstall用于软件安装,dba用于数据库管理),再创建用户并加入对应组:

# 创建组
groupadd oinstall
groupadd dba
# 创建用户(归属oinstall组,附加dba组)
useradd -g oinstall -G dba oracle
# 设置密码
passwd oracle

2. 配置Oracle用户环境变量

编辑Oracle用户的~/.bash_profile(或~/.bashrc),添加Oracle环境变量,确保数据库命令可全局调用:

# 设置Oracle安装目录、SID等变量
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1  # 根据实际路径调整
export ORACLE_SID=orcl                                   # 数据库实例名
export PATH=$PATH:$ORACLE_HOME/bin                       # 添加Oracle bin目录到PATH
# 生效配置
source ~/.bash_profile

3. 设置目录权限

Oracle的关键目录(安装目录、数据文件目录、配置文件目录)需严格限制权限,防止未授权访问:

# 安装目录(所有者:oracle;组:oinstall;权限:755,所有者可读写执行,组和其他用户可读执行)
chown -R oracle:oinstall /u01/app/oracle
chmod -R 755 /u01/app/oracle

# 数据文件目录(所有者:oracle;组:dba;权限:775,所有者可读写执行,组可读写执行,其他用户可读执行)
chown -R oracle:dba /u01/oradata
chmod -R 775 /u01/oradata

# 配置文件目录(如listener.ora、tnsnames.ora,所有者:oracle;组:oinstall)
chown oracle:oinstall /u01/app/oracle/network/admin/listener.ora
chown oracle:oinstall /u01/app/oracle/network/admin/tnsnames.ora
chmod 644 /u01/app/oracle/network/admin/*.ora

4. 配置SELinux(若启用)

若系统启用SELinux,需调整上下文以允许Oracle访问相关资源:

# 设置Oracle Home目录上下文
chcon -R -t oracle_home_t /u01/app/oracle
# 设置数据文件目录上下文
chcon -R -t oracle_db_t /u01/oradata

5. 配置sudo权限(可选)

为Oracle用户配置特定命令的免密执行权限,简化日常运维(如启动监听、备份):

sudo visudo
# 添加以下内容(允许oracle用户无需密码执行lsnrctl和rman命令)
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 /

二、数据库层面权限设置

1. 系统权限管理

系统权限允许用户执行数据库级操作(如创建会话、建表、备份)。通过GRANT语句授予,遵循最小权限原则

-- 授予连接数据库权限
GRANT CREATE SESSION TO test_user;
-- 授予建表、建视图、建序列权限
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE TO test_user;
-- 授予DBA权限(谨慎使用,仅给管理员)
GRANT DBA TO admin_user;

2. 对象权限管理

对象权限允许用户操作特定数据库对象(如表、视图、存储过程)。通过GRANT语句授予,可细化到列级:

-- 授予对employees表的查询、更新权限
GRANT SELECT, UPDATE ON hr.employees TO test_user;
-- 授予对departments表的插入权限(仅针对name列)
GRANT INSERT(name) ON hr.departments TO test_user;
-- 授予执行存储过程的权限
GRANT EXECUTE ON hr.calc_salary TO test_user;

3. 角色管理

角色是权限的集合,可简化多用户权限分配。创建角色→授予权限→分配角色:

-- 创建角色
CREATE ROLE hr_manager;
-- 授予角色权限
GRANT SELECT ON hr.employees, INSERT ON hr.departments TO hr_manager;
-- 分配角色给用户
GRANT hr_manager TO hr_emp1, hr_emp2;
-- 角色可级联授权(WITH ADMIN OPTION)
GRANT hr_manager TO dept_head WITH ADMIN OPTION;

4. 权限审计与撤销

定期审计权限,撤销不必要的权限,防止权限滥用:

-- 查看用户系统权限
SELECT * FROM dba_sys_privs WHERE grantee = 'TEST_USER';
-- 查看用户对象权限
SELECT * FROM dba_tab_privs WHERE grantee = 'TEST_USER';
-- 撤销权限
REVOKE SELECT ON hr.employees FROM test_user;
REVOKE hr_manager FROM hr_emp1;

5. 密码策略设置

通过PROFILE设置密码复杂度、生命周期,增强账户安全性:

-- 创建密码策略(可选,需先创建PROFILE)
CREATE PROFILE strict_profile LIMIT
  PASSWORD_LIFE_TIME 90 DAYS,       -- 密码有效期90天
  PASSWORD_GRACE_TIME 7 DAYS,       -- 密码过期前7天提醒
  PASSWORD_REUSE_TIME 365 DAYS,     -- 密码重复使用间隔365天
  PASSWORD_COMPLEXITY CHECK (UPPER(SUBSTR(PASSWORD,1,1)) = UPPER(SUBSTR(PASSWORD,1,1))); -- 密码首字母大写

-- 将策略分配给用户
ALTER USER test_user PROFILE strict_profile;

注意事项

0
看了该问题的人还看了