Oracle在CentOS上的用戶權限管理分為操作系統層面(保障Oracle軟件運行安全)和數據庫層面(控制用戶對數據庫的訪問與操作)兩部分,以下是具體操作流程:
操作系統層面的權限管理主要是創建專用用戶/組、設置目錄權限及系統參數,確保Oracle數據庫運行的安全性與穩定性。
Oracle建議使用專用用戶(如oracle)和組(如oinstall、dba)管理數據庫,避免使用root用戶。
# 創建oinstall組(安裝Oracle軟件的用戶組)
groupadd oinstall
# 創建dba組(具有數據庫管理權限的用戶組)
groupadd dba
# 創建oracle用戶,加入oinstall和dba組
useradd -g oinstall -G dba oracle
# 設置oracle用戶密碼
passwd oracle
說明:oinstall組用于Oracle軟件的安裝與維護,dba組用于數據庫的管理(如啟動/停止數據庫)。
Oracle軟件及相關目錄(如安裝目錄、數據文件目錄、配置目錄)的權限必須歸屬于oracle用戶和oinstall組,避免權限泄露。
# 假設Oracle安裝目錄為/opt/oracle,數據文件目錄為/opt/oracle/oradata
mkdir -p /opt/oracle /opt/oracle/oradata
# 設置目錄所有者為oracle:oinstall,權限為775(所有者與組有讀寫執行權限,其他用戶有讀執行權限)
chown -R oracle:oinstall /opt/oracle /opt/oracle/oradata
chmod -R 775 /opt/oracle /opt/oracle/oradata
說明:若存在監聽器配置目錄(如/u01/app/oracle/network/admin),需同步設置權限:
chown -R oracle:oinstall /u01/app/oracle/network/admin
chmod -R 775 /u01/app/oracle/network/admin
若CentOS啟用了SELinux(默認為enforcing模式),需設置正確的SELinux上下文,避免Oracle無法訪問目錄。
# 參考Oracle官方文檔,設置Oracle目錄的SELinux上下文
semanage fcontext -a -t oracle_db_t "/opt/oracle(/.*)?"
restorecon -Rv /opt/oracle
說明:若未安裝semanage工具,可通過yum install policycoreutils-python-utils安裝。
Oracle對系統內核參數有特定要求,需修改/etc/sysctl.conf文件并生效:
# 編輯sysctl.conf文件
vi /etc/sysctl.conf
# 追加以下參數(根據Oracle版本調整)
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 2147483648
net.ipv4.ip_local_port_range = 9000 65500
# 生效配置
sysctl -p
說明:這些參數用于優化系統資源(如共享內存、文件句柄數),確保Oracle正常運行。
切換至oracle用戶,編輯~/.bash_profile文件,添加Oracle環境變量:
su - oracle
vi ~/.bash_profile
# 追加以下內容(根據實際安裝路徑調整)
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
# 生效環境變量
source ~/.bash_profile
說明:環境變量用于Oracle客戶端的正常連接與操作。
數據庫層面的權限管理通過SQL*Plus或Oracle SQL Developer等工具執行,主要分為系統權限(全局操作權限)和對象權限(特定對象訪問權限)。
權限管理需具有SYSDBA或相應權限的用戶(如SYS、SYSTEM)執行:
su - oracle
sqlplus / as sysdba
說明:/ as sysdba表示以SYSDBA身份登錄,無需輸入密碼(需操作系統用戶屬于dba組)。
創建用戶時需指定默認表空間(存儲用戶數據的表空間)、臨時表空間(存儲排序等臨時數據的表空間),初始狀態下用戶無任何權限。
-- 創建用戶itbank,密碼為123456,默認表空間為itbank_tbs,臨時表空間為temp
CREATE USER itbank IDENTIFIED BY 123456
DEFAULT TABLESPACE itbank_tbs
TEMPORARY TABLESPACE temp;
說明:若未提前創建表空間,需先執行CREATE TABLESPACE語句(如CREATE TABLESPACE itbank_tbs DATAFILE '/opt/oracle/oradata/ORCL/itbank.dbf' SIZE 100M AUTOEXTEND ON;)。
用戶創建后需授予相應權限才能訪問數據庫:
-- 授予connect(連接數據庫)、resource(創建對象)、dba(系統管理)權限
GRANT CONNECT, RESOURCE, DBA TO itbank;
常用系統權限:CREATE SESSION(連接數據庫)、CREATE TABLE(創建表)、UNLIMITED TABLESPACE(無限制使用表空間)。-- 授予itbank用戶對scott.emp表的查詢、插入、更新權限
GRANT SELECT, INSERT, UPDATE ON scott.emp TO itbank;
常用對象權限:SELECT(查詢)、INSERT(插入)、UPDATE(更新)、DELETE(刪除)、ALL(所有權限)。若需收回用戶權限,可使用REVOKE語句:
-- 撤銷itbank用戶的CONNECT、RESOURCE系統權限
REVOKE CONNECT, RESOURCE FROM itbank;
-- 撤銷itbank用戶對scott.emp表的SELECT、INSERT、UPDATE對象權限
REVOKE SELECT, INSERT, UPDATE ON scott.emp FROM itbank;
若用戶不再使用,可刪除用戶及其所有對象(如表、視圖):
-- 刪除itbank用戶及其所有對象(CASCADE為級聯刪除)
DROP USER itbank CASCADE;
CONNECT、RESOURCE權限,無需DBA權限)。custom_role),將權限授予角色后再將角色授予用戶,簡化權限管理。-- 創建角色
CREATE ROLE custom_role;
-- 授予角色權限
GRANT SELECT, INSERT ON scott.emp TO custom_role;
-- 授予用戶角色
GRANT custom_role TO itbank;
DBA_SYS_PRIVS(系統權限)、DBA_TAB_PRIVS(對象權限)視圖查看用戶權限,及時回收不必要的權限。-- 查看itbank用戶的系統權限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ITBANK';
-- 查看itbank用戶的對象權限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'ITBANK';
通過以上步驟,可實現Oracle在CentOS上的用戶權限管理,保障數據庫的安全性與可用性。