在Debian上运行Oracle数据库前,需避免使用root用户,转而创建专用的系统用户和用户组,实现权限隔离。
oinstall(Oracle安装组,拥有Oracle软件目录所有权)和dba(数据库管理员组,拥有数据库管理权限)两个专用组。sudo groupadd oinstall
sudo groupadd dba
oracle用户,将其加入oinstall(主组)和dba(附加组),设置密码并指定家目录。sudo useradd -g oinstall -G dba -m -d /home/oracle -s /bin/bash oracle
sudo passwd oracle
/etc/security/limits.d/30-oracle.conf文件,限制oracle用户的资源使用(如进程数、文件描述符),防止单个进程耗尽系统资源。oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft memlock 33554432
oracle hard memlock 33554432
/u01/app/oracle)和数据目录的所有权赋予oracle:oinstall,并设置合理权限(755为目录、644为文件)。sudo chown -R oracle:oinstall /u01
sudo chmod -R 755 /u01
以上步骤确保Oracle运行在最小权限原则下,降低系统级安全风险。
Oracle采用**RBAC(基于角色的访问控制)**模型,通过用户、角色、权限的组合实现细粒度权限管理。
CREATE USER语句创建数据库用户,设置密码(建议使用强密码策略)和默认表空间。CREATE USER myuser IDENTIFIED BY StrongPassword123 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
ALTER PROFILE设置密码复杂度(如长度、有效期、历史密码检查),避免弱密码。ALTER PROFILE default LIMIT PASSWORD_LENGTH 8 PASSWORD_VERIFY_FUNCTION verify_function_11G PASSWORD_REUSE_MAX 5 PASSWORD_REUSE_TIME 30;
ALTER USER myuser PROFILE default;
CONNECT(基础连接权限)、RESOURCE(开发权限)、DBA(管理员权限)等预定义角色,但不建议直接授予DBA角色(权限过大)。-- 授予开发用户基本权限(避免使用DBA角色)
GRANT CONNECT, RESOURCE TO dev_user;
report_user),授予特定权限,再分配给用户,实现权限复用。-- 创建角色并授予权限
CREATE ROLE report_user;
GRANT SELECT ON hr.employees TO report_user;
GRANT SELECT ON hr.departments TO report_user;
-- 将角色授予用户
GRANT report_user TO report_reader;
WITH ADMIN OPTION传递(如授予dba_team角色WITH ADMIN OPTION,允许其管理下属角色);敏感角色可设置口令认证(如CREATE ROLE audit_role IDENTIFIED BY audit123),增强权限控制。GRANT授予,REVOKE撤销。-- 授予创建表的系统权限
GRANT CREATE TABLE TO dev_user;
-- 授予创建会话的系统权限(CONNECT角色已包含)
GRANT CREATE SESSION TO dev_user;
-- 授予对特定表的SELECT、INSERT权限
GRANT SELECT, INSERT ON hr.employees TO dev_user;
-- 授予列级权限(仅允许更新salary列)
GRANT UPDATE (salary) ON hr.employees TO hr_manager;
启用Oracle审计功能,记录权限使用情况(如SELECT、INSERT操作),便于后续审查。
-- 启用审计(需DBA权限)
AUDIT SELECT ON hr.employees BY myuser;
AUDIT INSERT ON hr.employees BY myuser;
-- 查看审计日志
SELECT * FROM dba_audit_trail WHERE username = 'MYUSER';
权限管理需与网络安全措施结合,进一步降低风险。
iptables或ufw限制对Oracle监听端口(默认1521)的访问,仅允许信任IP地址连接。sudo iptables -A INPUT -p tcp --dport 1521 -s trusted_ip -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 1521 -j DROP
ssh-keygen -t rsa
ssh-copy-id oracle@debian_server_ip
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart ssh
sqlnet.ora和listener.ora文件,配置证书路径。dba_users、dba_roles、dba_tab_privs等数据字典视图,确认权限分配是否符合业务需求,撤销未使用的权限。-- 查看用户权限
SELECT * FROM dba_tab_privs WHERE grantee = 'MYUSER';
-- 查看角色权限
SELECT * FROM role_tab_privs WHERE role = 'REPORT_USER';
system表空间中的权限表),防止配置丢失。