連載
» 2018年07月13日 05時00分 公開

今さら? 今こそ! データベースセキュリティ(11):アクセス制御の抜け穴となりがちな特権をどのように管理するか (1/2)

本連載では、データベースセキュリティの「考え方」と「必要な対策」をおさらいし、Oracle Databaseを軸にした「具体的な実装方法」や「Tips」を紹介していきます。今回は特権ユーザーの管理について紹介します。

[福田知彦,日本オラクル株式会社]

連載バックナンバー

 前回の「安全なデータベース運用のキモ、ユーザーのアクセス制御をどう設定すべきか」では、アクセス制御の考え方として最小権限の原則の徹底を説明しました。業務上必要以上の権限を与えないようにするということですが、弊社で実施しているデータベースセキュリティリスクアセスメントでは、特権を利用しているがために、最小権限の原則が徹底されていないシステムをたびたび見かけます。

 「特権」と聞くと、管理者権限を思い浮かべる方が多いと思います。管理者権限は、データベース上で何でもできる権限であり、強力な特権です。Oracle Databaseの管理者権限はDBAロールですが、このロールをアプリケーションユーザーに付与しているシステムもありました。

 ただし、管理者権限以外の特権もあります。管理者権限をアプリケーションユーザーに付与していなくても、同様に強力な特権をアプリケーションユーザーに付与しているケースがあります。前回も紹介しましたが、例えば「全てのデータを参照することができる権限」、Oracle Databaseでは「SELECT ANY TABLE権限」というものがあります。アプリケーション構築時に、「アプリケーションがどの表にアクセスするか分からない」「後で表を追加したときにいちいち権限設定するのが面倒」などの理由で、このような強力な特権をアプリケーションユーザーに付与しておき、本番稼働後もどの表にアクセスしているか分からないため、悪影響が出ないように、そのまま本番稼働を続けてしまっているシステムもありました。

 今回は、特権の中で特に扱いの難しい、管理者権限を管理する方法について説明します。

まずは管理者権限の付与を最小限に

 管理者権限は非常に強い権限なので、なるべく利用しないようにし、利用する場合でも人数を最小限に限定すべきです。

 管理者権限(DBAロール)には、データベースの起動・停止・構成変更など、データベース自体を管理する権限、データベースのユーザーやセキュリティ設定を管理する権限、そしてデータ自体を管理する権限が全て含まれます。

 データベースのインフラをIT部門が管理し、アプリケーションとデータのオーナーが業務部門である場合、IT部門はアプリケーションのデータを管理する必要がないため、管理者権限を利用すべきではありません。データベースのインフラを管理するのに必要な権限(業務上必要な最小の権限)のみ付与したユーザーを作成し、アプリケーションのデータにアクセスする権限はそのユーザーに付与すべきではありません。

 また、データベースインフラ管理担当者がユーザーやセキュリティを設定する権限を持っていると、自分が持っていない権限のユーザーのパスワードを勝手に変更して成りすましたり、セキュリティ設定を勝手に変更したりする可能性がありますので、厳密に職務分掌を実施するためにはこれらの権限も付与すべきではありません。

 データベースに事前定義されている管理用ユーザー(SYS、SYSTEM)は、データベースの管理、データへのアクセス、データベースユーザーの管理、セキュリティ設定の全てができてしまうため、利用すべきではありません。

 システムの規模や管理体制によっては、データベースのインフラ管理とアプリケーションやデータのオーナーを兼務する場合があります。この場合、データベース自体、ユーザー、セキュリティ、データの管理を全ておこないますので、管理者権限(DBAロール)を付与したユーザーを利用しても、その時点では最小権限の原則に従っているといえます。しかし、将来的にデータベース統合を行ったり、アプリケーションやデータのオーナーでない別のシステムが同じデータベースに構築されたりした場合、権限の見直しが必要となります。

 データベースに事前定義されている管理用ユーザー(SYS、SYSTEM)は、最小権限の原則的には問題はありませんが、監査証跡を見ても実際に操作した人が誰なのかが分からなくなってしまうため、利用すべきではありません。

 結局のところ、管理者であっても、管理者権限(DBAロール)や事前定義の管理用ユーザー(SYS、SYSTEM)を利用せずに、個人ことにデータベースユーザーを作成し、必要最小限の権限を付与するのが基本です。

インフラ/アプリケーション管理者には、それぞれにアカウントを作成し、業務に応じて適切な権限を付与する

 しかし利便性のため、DBAロールやSELECT ANY TABLEなどの強力な権限をユーザーへ付与しているシステムも多数あると思います。また、データベースのインフラを管理するユーザーに対する最小権限を定義することが難しく、「DBAロールからアプリケーションのデータへのアクセス権限を除いた権限が作れたらよい」と考える方も多いと思います。

 まさにこの、「データベース管理者であってもアプリケーションのデータにアクセスできないようにする」のがOracle Database Vaultです。

特権ユーザーに対するアクセス制御を提供するOracle Database Vault

 Oracle Database Vaultは、「例え管理者(SYS、SYSTEM、DBAロールを持つユーザー)であっても、アプリケーションのデータが見られない」という強力なアクセス制御を実現します。

SQL> show user
ユーザーは"SYS"です。
SQL> select * from app.users;
select * from app.users
                  *
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています。

 上記の例では、データベース管理者であるSYSユーザーは、通常であれば全ての表にアクセスする権限を持っていますので、SELECT文は成功するはずです。しかし、Oracle Database VaultによってAPPスキーマのUSERS表を保護してあるため、「ORA-01031: 権限が不足しています。」エラーとなり、データにアクセスすることができません。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。