SQL*Plus本身无需特殊系统权限,但需确保运行它的用户具备访问Oracle数据库的适当权限。通常需将用户加入以下系统组:
usermod命令添加用户至对应组(如sudo usermod -aG oinstall,dba your_username),并重新登录使组权限生效。此外,用户需具备文件系统权限(如加入adm组)以创建/修改SQL*Plus生成的日志文件。数据库权限需遵循“最小权限原则”,避免授予用户不必要的权限:
CREATE SESSION用于登录、SELECT用于查询),禁止授予DROP ANY TABLE、ALTER SYSTEM等高危权限;SELECT、INSERT等权限(如GRANT SELECT ON emp TO hr_user),而非授予ALL权限。GRANT/REVOKE语句实现,确保用户仅能访问其职责范围内的数据。通过Oracle数据库的PRODUCT_USER_PROFILE表限制SQL*Plus中的危险命令,防止误操作或恶意使用:
HOST、EDIT、SPOOL),示例:INSERT INTO PRODUCT_USER_PROFILE (PRODUCT, USERID, ATTRIBUTE, CHAR_VALUE)
VALUES ('SQL*Plus', '%', 'DISABLED', 'HOST');
INSERT INTO PRODUCT_USER_PROFILE (PRODUCT, USERID, ATTRIBUTE, CHAR_VALUE)
VALUES ('SQL*Plus', '%', 'DISABLED', 'EDIT');
%)使用HOST(执行系统命令)、EDIT(编辑SQL文件)等命令。如需恢复,删除对应行即可。/nolog选项启动SQL*Plus,再通过CONNECT命令输入密码(密码不会显示在屏幕上):sqlplus /nolog
CONNECT username/password@hostname:port/SID
sqlplus scott/tiger@orcl),建议通过环境变量或外部配置文件(需设置严格权限)传递敏感信息。通过配置Oracle Net Services的sqlnet.ora文件,启用加密连接以保护数据传输安全:
sqlnet.ora(位于$ORACLE_HOME/network/admin目录):SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)
/etc/login.defs文件,设置密码有效期(PASS_MAX_DAYS=90,强制每90天修改密码)、最小长度(PASS_MIN_LEN=12)、警告期(PASS_WARN_AGE=7,提前7天提示);通过/etc/security/pwquality.conf强化密码复杂度(如minlen=12、minclass=3,要求包含大小写、数字、特殊字符中的至少3类)。ufw限制SQL*Plus端口(默认1521)的访问,仅允许可信IP地址连接:sudo ufw default deny incoming
sudo ufw allow from 192.168.1.0/24 to any port 1521
sudo ufw enable
auditd监控SQL*Plus相关文件(如$ORACLE_HOME/bin/sqlplus、$ORACLE_HOME/network/log目录),记录用户访问和操作行为,便于后续追溯。$ORACLE_HOME/bin目录权限为750(所有者可读/写/执行,组用户可读/执行,其他用户无权限);alert.log)和配置文件(如tnsnames.ora)需设置为640权限(所有者可读/写,组用户可读,其他用户无权限),防止未授权用户查看敏感信息。