概要
以下の作業のみ実施することができる、OSユーザ"oramnt"とOracleユーザ"ops$oramnt"を作成する。
- OSユーザoramntが使用できるOSコマンドは「sqlplus」「exit」のみ。他のコマンドは極力使用できないよう設定。
- OSユーザoramntは、oracleにsqlplusでログインし、「セッション情報」「表領域の使用量」を取得出来る。
- OSユーザoramntは、cronで定期的に「セッション情報」「表領域の使用量」を取得する。
- Oracleユーザops$oramntは、「接続」「セッション情報の取得」「表領域の使用量の取得」以外は何もできない。
内容
-
OSとOracleはインストール済みとする。
-
制限付きのbash"rbash"を使用する。
-
bashの補完機能は無効にする。
-
.bash_profile、.inputrcはrootが保持し、oramntユーザが更新できないようにする。
-
oramntユーザに実行を許可するコマンドは"/home/oramnt/bin"に配置する。
シンボリックリンクを作成するか、実行ファイルを直接配置する。 -
"/home/oramnt/bin"に配置したコマンド以外は、極力使用できないように設定する。
-
oracleへのログイン認証はOS_AUTHENT_PREFIXを使用した外部認証を使用する。
(パスワードなしでのログインを想定)
OS_AUTHENT_PREFIXはデフォルトのops$を使用し、ops$oramntユーザを作成する。 -
「セッション情報」「表領域の使用量」はビューを作成し取得するようにする。
所有者はsysとし、ビュー名は以下とする。
セッション情報 → view_sinfo
表領域の使用量 → view_dinfo
※今回は手間を省くためsysスキーマに作成しているが、通常はこのようなことをしてはいけない。 -
ops$oramntは、view_sinfo/view_dinfoのselectのみ実行できる。
環境構成
▼ OS
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.4 (Santiago)
▼ Oracle
SQL> select * from V$VERSION;
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
手順
OSユーザ「oramnt」作成
su -
# ユーザ作成
useradd oramnt
passwd oramnt
# 制限付きシェルの設定
# ※ bashのシンボリックリンク"rbash"を作成し起動すると、制限付きのシェルになる
ln -s /bin/bash /bin/rbash
vi /etc/shells
# 以下を追記する。
# #-------------------
# /bin/rbash
# #-------------------
# oramntユーザにシェルスクリプトを設定
su - oramnt
chsh
# oramnt のシェルを変更します。
# パスワード:
# 新しいシェル [/bin/bash]: /bin/rbash
# シェルを変更しました。
exit
# oramntユーザの実行を許可するコマンドを配置するディレクトリの作成
mkdir /home/oramnt/bin
# .bash_profileの設定
# .bash_profileをrootに変更。oramntユーザが変更できないように設定する。
chown root:root /home/oramnt/.bash_profile
ls -l /home/oramnt/.bash_profile
vi /home/oramnt/.bash_profile
# 以下を追記する。
# #-------------------
# umask 077 # 所有者のみアクセス可能
# export PATH=/home/oramnt/bin # このディレクトリに実行を許可するコマンドを配置
# #-------------------
# bashの補完機能を無効にする。
vi /home/oramnt/.inputrc
# 以下を追記する。
# #-------------------
# set disable-completion on
# #-------------------
chown root:root /home/oramnt/.inputrc
ls -l /home/oramnt/.inputrc
▼ bashのビルドインコマンドを無効化する。
# helpコマンドで内部コマンドを確認し、enableコマンドで無効化する。
# 以下のコマンドは無効化しない。
# - exit
# - echo,printf (rbashの動作がおかしくなる)
# - enableコマンドを実行すると、エラー "-rbash: enable: *******: not a shell builtin"が出るコマンド
# enableコマンドの無効化は最後に実行する。 ※enableコマンドはrbashで実行できないため、無効化しなくても問題ない)
su -
vi /home/oramnt/.bash_profile
# 以下を追記する。
# #-------------------
# enable -n alias
# enable -n bg
# enable -n bind
# enable -n break
# enable -n builtin
# enable -n caller
# enable -n cd
# enable -n command
# enable -n compgen
# enable -n complete
# enable -n compopt
# enable -n continue
# enable -n declare
# enable -n dirs
# enable -n disown
# enable -n eval
# enable -n exec
# enable -n export
# enable -n fc
# enable -n fg
# enable -n getopts
# enable -n hash
# enable -n help
# enable -n history
# enable -n jobs
# enable -n kill
# enable -n let
# enable -n local
# enable -n logout
# enable -n mapfile
# enable -n popd
# enable -n pushd
# enable -n pwd
# enable -n read
# enable -n readarray
# enable -n readonly
# enable -n return
# enable -n set
# enable -n shift
# enable -n shopt
# enable -n source
# enable -n suspend
# enable -n test
# enable -n times
# enable -n trap
# enable -n type
# enable -n typeset
# enable -n ulimit
# enable -n umask
# enable -n unalias
# enable -n unset
# enable -n wait
# enable -n enable
# #-------------------
# 動作確認
su - oramnt
# 実行できないことを確認
ls
# -rbash: ls: コマンドが見つかりません
# 実行できないことを確認
kill
# -rbash: kill: コマンドが見つかりません
Oracle関連の設定
▼ メンテナンス用Oracleユーザ「ops$oramnt」の作成
su - oracle
-- viewの作成
sqlplus / as sysdba
create view view_sinfo as select sid,serial#,username,osuser,program,machine from v$session where type = 'USER';
create view view_dinfo as
WITH
T AS (
SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 "MBYTES" FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME
UNION ALL
SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 "MBYTES" FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME) ,
F AS (
SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 "MBYTES" FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME
UNION ALL
SELECT TABLESPACE_NAME, SUM(BYTES_FREE)/1024/1024 "MBYTES" FROM V$TEMP_SPACE_HEADER GROUP BY TABLESPACE_NAME)
SELECT
T.TABLESPACE_NAME "TABLESPACE_NAME",
TRUNC(T.MBYTES,1) "TOTAL (MB)",
TRUNC(NVL(F.MBYTES, 0),1) "FREE (MB)",
TRUNC(DECODE(T.MBYTES, 0 , 0, (1-NVL(F.MBYTES,0)/T.MBYTES)*100),1) "USED (%)"
FROM T, F
WHERE T.TABLESPACE_NAME = F.TABLESPACE_NAME (+)
ORDER BY T.TABLESPACE_NAME;
select * from view_sinfo;
select * from view_dinfo;
-- メンテ用ユーザの作成
-- os_authent_prefixパラメータ確認
show parameter os_authent_prefix
-- ops$
-- ユーザ作成
create user ops$oramnt identified externally;
grant create session to ops$oramnt;
grant select on sys.view_sinfo to ops$oramnt;
grant select on sys.view_dinfo to ops$oramnt;
exit
▼ sqlplus接続設定
su -
# sqlplusを実行できるように/home/oramnt/binにシンボリックリンクを配置。
ln -s /u01/app/oracle/product/11.2.0/dbhome_1/bin/sqlplus /home/oramnt/bin/sqlplus
# .bash_profileにoracle環境設定
vi /home/oramnt/.bash_profile
# 以下を追記する。(環境に合わせる)
# #-------------------
# export ORACLE_BASE=/u01/app/oracle
# export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
# export ORACLE_SID=TEST01
# export LANG=ja_JP.UTF-8
# #-------------------
# 動作確認
su - oramnt
echo "select * from sys.view_sinfo;" | sqlplus -S /
echo "select * from sys.view_dinfo;" | sqlplus -S /
exit
スクリプトの定期的実行設定
▼Oracleから情報を取得するスクリプトの作成
su -
# スクリプトファイルの作成
vi /home/oramnt/bin/orainf.sh
# 以下を記載する。
# #-------------------
# #!/bin/sh
# echo "select * from sys.view_sinfo;" | sqlplus -S /
# echo "select * from sys.view_dinfo;" | sqlplus -S /
# #-------------------
# ファイルの権限変更
chmod 700 /home/oramnt/bin/orainf.sh
chown oramnt:oramnt /home/oramnt/bin/orainf.sh
# 確認
ls -l /home/oramnt/bin/orainf.sh
su - oramnt
orainf.sh
exit
▼cronへの登録(rootユーザで実施)
今回は1分毎にorainf.shを実行するように設定。
su -
# oramntユーザのcronに登録
crontab -u oramnt -e
# 以下を追加
# # -------------------
# */1 * * * * orainf.sh > orainf.log
# # -------------------
# 登録内容の確認
crontab -u oramnt -l
# 動作確認
# 1分毎に以下のファイルが更新されていることを確認
ls -l /home/oramnt/orainf.log
cat /home/oramnt/orainf.log