NEWSニュース&ブログ

RDS for Oracle セッションKILLしてみた

この記事は最終更新から10年以上経過しています。内容が古くなっている可能性があります。

投稿日:2014/12/15

みなさん、お久しぶりです。今回ブログを担当させていただきます坂野です。
先日RDS for Oracleをいろいろ触っていてあることに気付きました。
それは・・・。セッションがKILLできない!?
調べるとAWS documentationに記載されているのですね!?
検証も併せてやったので、それらをまとめてみました。


1.マスターユーザーの権限を確認

そもそもRDSのマスターユーザーは、どのような権限が付与されているのか確認してみましょう。
①まずは、マスターユーザーに付与されているROLEを調べてみます
SQL> select * from dba_role_privs where grantee = 'ORACLE';

GRANTEE              GRANTED_ROLE                   ADMIN_ DEFAUL
-------------------- ------------------------------ ------ ------
ORACLE               AQ_ADMINISTRATOR_ROLE          YES    YES
ORACLE               SELECT_CATALOG_ROLE            YES    YES
ORACLE               RESOURCE                       YES    YES
ORACLE               AQ_USER_ROLE                   YES    YES
ORACLE               EXECUTE_CATALOG_ROLE           YES    YES
ORACLE               RECOVERY_CATALOG_OWNER         YES    YES
ORACLE               CTXAPP                         YES    YES
ORACLE               DBA                            YES    YES
ORACLE               CONNECT                        YES    YES
②次に、マスターユーザーに付与されているシステム権限を調べてみます
SQL> select * from dba_sys_privs where grantee = 'ORACLE';
GRANTEE              PRIVILEGE                      ADMIN_
-------------------- ------------------------------ ------
ORACLE               GRANT ANY OBJECT PRIVILEGE     YES
ORACLE               RESTRICTED SESSION             YES
ORACLE               DROP ANY DIRECTORY             YES
ORACLE               UNLIMITED TABLESPACE           YES
③RDSではないOracleとの権限差異があるかを調べてみます
通常インストールしたOracleのsysスキーマに付与された権限とRDSのマスターユーザーに付与された権限を比較してみます。
SQL> select * from session_privs  ・・・ 通常インストールのOracle
  2  minus
  3  select * from session_privs@<DBリンク名>; ・・・ RDS
PRIVILEGE
------------------------------------------------
ALTER DATABASE
ALTER DATABASE LINK
ALTER PUBLIC DATABASE LINK
ALTER SYSTEM
CREATE ANY DIRECTORY
CREATE EXTERNAL JOB
EXEMPT ACCESS POLICY
EXEMPT IDENTITY POLICY
GRANT ANY PRIVILEGE
GRANT ANY ROLE
SYSDBA
SYSOPER
RDSのマスターユーザーには、DBA権限が付与されているにも関わらず「ALTER DATABASE」や「ALTER SYSTEM」権限が付与されていないようです。 これでは、セッションをKILLすることはできませんね。

 

2.セッションKILL

①現在ログイン中のセッションのSIDとシリアル番号を調べます
SQL> select sid , serial# , username from v$session where username = 'ORACLE';

       SID    SERIAL# USERNAME
---------- ---------- ----------------------------------------------------
         1         53 ORACLE

RDSでのセッションをKILLするためのコマンドをAWS documentationで確認します。

図1:セッションKILLコマンド それでは、セッションをKILLしてみましょう。
SQL> exec rdsadmin.rdsadmin_util.kill(1,53);

PL/SQLプロシージャが正常に完了しました。
SQL> select sid , serial# , username from v$session where username = 'ORACLE';
select sid , serial# , username from v$session where username = 'ORACLE'
*
行1でエラーが発生しました。:
ORA-00028: セッションは強制終了されました。
無事にセッションは強制終了されました。

このようにRDS for Oracle では通常インストールした時とオペレーションが違うことが多々あります。 利用者にとっては設定や運用の手間がいらなく使い勝手が良いのですが、DBAとして従事していた者としては若干戸惑うこともあります。今後も簡単ではありますが、検証と備忘録としてこの辺りをブログにしていこうと思います。




坂野靖幸

AWSソリューションアーキテクト。社内では主にデータベースを担当。DBAの経験を経て現在はAWS+Oracle」「redshift」を主に担当。
最近、AKB48の影響か苗字を「いたの」と読み間違われます。土へんです。