6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

出来る限り最小限の権限しか持たないOracleメンテナンス用のユーザを作成する。また、定期的にOracleから情報を取得する。

Last updated at Posted at 2016-05-08

概要

以下の作業のみ実施することができる、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
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?