Oracle在Linux上的權限設置方法
在Linux環境中,Oracle數據庫的權限設置需兼顧操作系統層面(用戶、目錄、文件權限)與數據庫層面(系統權限、對象權限、角色管理),兩者結合才能確保數據庫安全穩定運行。
Oracle數據庫需以專用用戶(如oracle)運行,避免使用root等高權限賬戶。首先創建用戶組(oinstall用于軟件安裝,dba用于數據庫管理),再創建用戶并加入對應組:
# 創建組
groupadd oinstall
groupadd dba
# 創建用戶(歸屬oinstall組,附加dba組)
useradd -g oinstall -G dba oracle
# 設置密碼
passwd 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
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
若系統啟用SELinux,需調整上下文以允許Oracle訪問相關資源:
# 設置Oracle Home目錄上下文
chcon -R -t oracle_home_t /u01/app/oracle
# 設置數據文件目錄上下文
chcon -R -t oracle_db_t /u01/oradata
為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 /
系統權限允許用戶執行數據庫級操作(如創建會話、建表、備份)。通過GRANT語句授予,遵循最小權限原則:
-- 授予連接數據庫權限
GRANT CREATE SESSION TO test_user;
-- 授予建表、建視圖、建序列權限
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE TO test_user;
-- 授予DBA權限(謹慎使用,僅給管理員)
GRANT DBA TO admin_user;
對象權限允許用戶操作特定數據庫對象(如表、視圖、存儲過程)。通過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;
角色是權限的集合,可簡化多用戶權限分配。創建角色→授予權限→分配角色:
-- 創建角色
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;
定期審計權限,撤銷不必要的權限,防止權限濫用:
-- 查看用戶系統權限
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;
通過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;
/etc/passwd、/etc/group、Oracle數據字典),便于恢復。