温馨提示×

Ubuntu Oracle数据库权限设置

小樊
35
2025-11-11 05:38:34
栏目: 云计算

Ubuntu系统下Oracle数据库权限设置指南

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

在Ubuntu系统中,Oracle数据库的运行需要正确的操作系统用户、组和目录权限配置,以确保数据库服务的安全性和稳定性。

1. 创建专用操作系统用户和组

Oracle数据库建议使用专用用户(如oracle)和组(如oinstalldba)来管理数据库文件和进程,避免权限滥用。

# 创建oinstall组(安装组)和dba组(数据库管理员组)
sudo groupadd oinstall
sudo groupadd dba

# 创建oracle用户,隶属于oinstall和dba组,主目录设为/u01/app/oracle
sudo useradd -g oinstall -G dba -d /u01/app/oracle -s /bin/bash oracle

# 设置oracle用户密码
sudo passwd oracle

2. 创建Oracle相关目录并设置权限

Oracle需要存储软件文件、数据文件、配置文件等目录,需将这些目录的所有权赋予oracle:oinstall,并设置合适的权限(755用于目录,775用于数据目录)。

# 创建Oracle软件目录和数据目录
sudo mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1  # Oracle软件安装目录
sudo mkdir -p /u01/app/oracle/oradata               # 数据文件目录
sudo mkdir -p /u01/app/oracle/flash_recovery_area   # 恢复文件目录

# 设置目录所有权
sudo chown -R oracle:oinstall /u01

# 设置目录权限(软件目录755,数据目录775)
sudo chmod -R 755 /u01/app/oracle/product/19.0.0/dbhome_1
sudo chmod -R 775 /u01/app/oracle/oradata
sudo chmod -R 775 /u01/app/oracle/flash_recovery_area

3. 配置Oracle用户环境变量

切换到oracle用户,编辑.bash_profile文件,添加Oracle相关环境变量(如ORACLE_HOMEORACLE_SIDPATH等),确保Oracle命令能正确执行。

# 切换到oracle用户
sudo su - oracle

# 编辑.bash_profile文件
nano ~/.bash_profile

# 在文件末尾添加以下内容(根据实际安装路径调整)
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=ORCLCDB  # 数据库实例名(根据实际情况修改)
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

# 使环境变量生效
source ~/.bash_profile

4. 配置系统内核参数

Oracle对系统内核参数(如共享内存、信号量、文件句柄数等)有特定要求,需修改/etc/sysctl.conf文件并使参数生效。

# 编辑sysctl.conf文件
sudo nano /etc/sysctl.conf

# 添加以下内容(根据Oracle版本调整)
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.ip_local_port_range = 9000 65500

# 使参数生效
sudo sysctl -p

5. 配置防火墙(可选但推荐)

如果系统启用了防火墙(如firewalldufw),需开放Oracle数据库默认端口(1521/TCP),允许远程客户端连接。

# 使用firewalld开放1521端口
sudo firewall-cmd --permanent --zone=public --add-port=1521/tcp
sudo firewall-cmd --reload

# 或使用ufw开放1521端口
sudo ufw allow 1521/tcp

6. 配置SELinux(仅适用于启用了SELinux的系统)

如果Ubuntu系统启用了SELinux(默认禁用),需调整SELinux上下文,允许Oracle访问相关文件和目录。

# 临时禁用SELinux(重启后失效)
sudo setenforce 0

# 永久禁用SELinux(修改配置文件)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

二、Oracle数据库层面权限设置

操作系统权限设置完成后,需通过Oracle数据库工具(如sqlplus)管理数据库用户的权限,包括系统权限、对象权限和角色权限。

1. 以DBA身份连接到数据库

使用syssystem用户(默认具有DBA权限)连接到Oracle数据库,执行权限管理操作。

# 切换到oracle用户
su - oracle

# 使用sqlplus以sysdba身份连接(本地连接无需密码)
sqlplus / as sysdba

2. 创建数据库用户

使用CREATE USER语句创建新用户,指定用户名、密码、默认表空间和临时表空间(默认表空间通常为USERS,临时表空间为TEMP)。

-- 创建用户并指定默认/临时表空间
CREATE USER my_user 
IDENTIFIED BY MyPassword123 
DEFAULT TABLESPACE users 
TEMPORARY TABLESPACE temp;

3. 分配系统权限

系统权限是用户执行数据库操作的通用权限(如创建会话、创建表、创建视图等),可使用GRANT语句分配。

-- 分配基本连接权限(必须)
GRANT CREATE SESSION TO my_user;

-- 分配资源权限(允许创建表、视图、存储过程等)
GRANT RESOURCE TO my_user;

-- 分配DBA权限(完全控制数据库,谨慎使用)
GRANT DBA TO my_user;

-- 分配特定系统权限(如创建序列、存储过程)
GRANT CREATE SEQUENCE, CREATE PROCEDURE TO my_user;

4. 分配对象权限

对象权限是用户对特定数据库对象(如表、视图、序列)的操作权限(如查询、插入、更新、删除),可通过GRANT语句分配给用户或角色。

-- 分配表对象的查询、插入、更新、删除权限
GRANT SELECT, INSERT, UPDATE, DELETE ON hr.employees TO my_user;

-- 分配视图对象的查询权限
GRANT SELECT ON hr.departments TO my_user;

-- 分配序列对象的SELECT权限(用于获取下一个值)
GRANT SELECT ON hr.employee_seq TO my_user;

5. 使用角色简化权限管理

角色是一组权限的命名集合,可简化权限分配和管理(如Oracle内置的CONNECTRESOURCE角色)。

-- 创建自定义角色
CREATE ROLE my_role;

-- 将权限授予角色
GRANT CREATE SESSION, CREATE TABLE, SELECT ANY TABLE TO my_role;

-- 将角色授予用户
GRANT my_role TO my_user;

6. 管理用户密码和账户状态

可通过ALTER USER语句修改用户密码、锁定/解锁账户、调整表空间配额。

-- 修改用户密码
ALTER USER my_user IDENTIFIED BY NewPassword456;

-- 锁定用户账户(防止非法登录)
ALTER USER my_user ACCOUNT LOCK;

-- 解锁用户账户
ALTER USER my_user ACCOUNT UNLOCK;

-- 调整用户在表空间的配额(如允许无限使用USERS表空间)
ALTER USER my_user QUOTA UNLIMITED ON users;

7. 查看权限信息

可通过以下SQL语句查看用户的权限信息,便于权限审计和管理。

-- 查看当前用户的系统权限
SELECT * FROM USER_SYS_PRIVS;

-- 查看当前用户的对象权限
SELECT * FROM USER_TAB_PRIVS;

-- 查看当前用户拥有的角色
SELECT * FROM USER_ROLE_PRIVS;

三、权限管理最佳实践

  1. 最小权限原则:仅授予用户完成工作所需的最小权限,避免过度授权(如不需要DBA权限的用户不要分配DBA角色)。
  2. 使用角色管理权限:通过角色集中管理权限,减少重复操作,便于权限调整。
  3. 定期审计权限:定期检查用户权限(如USER_SYS_PRIVSUSER_TAB_PRIVS),撤销不再需要的权限。
  4. 保护DBA账户syssystem账户是数据库的最高权限账户,需设置强密码并限制访问。
  5. 备份权限设置:重要权限变更前备份相关数据字典(如DBA_SYS_PRIVSDBA_TAB_PRIVS),便于恢复。

0