none
ファイルストリームに対する行レベルのセキュリティ RRS feed

  • 質問

  • 皆様お世話になります。

    行レベルのセキュリティにつき、

    https://docs.microsoft.com/ja-jp/sql/relational-databases/security/row-level-security?view=sql-server-ver15

    を参考にして、ファイルストリームに対しても適用しようと思い、

    CREATE SECURITY POLICY FileFilter  
    ADD FILTER PREDICATE Security.FileSecurity(ID)
    ON dbo.[FILE]
    WITH (STATE = ON);  

    としたところ、

    「セキュリティ述語を FILESTREAM データを含むテーブルに追加できません。テーブル 'dbo.FILE' の列 'Chart' には、FILESTREAM データが含まれています。」

    というエラーになってしまいました。
    ファイルストリームの方のドキュメントを読み直すと、

    「FILESTREAM データは、その他のデータと同じように、テーブルまたは列のレベルで権限を与えることによってセキュリティで保護されます。」

    とあり、行レベルのセキュリティを適用できるとは書かれていませんが、ファイル(行)毎にアクセス制御するにはどうすればよいでしょうか?

    FILEテーブル内には、誰が見ても良いファイル、Aグループだけが見て良いファイル、Bグループだけが見て良いファイル・・・が混在し、ユーザーは、Aグループに属する人、Bグループに属する人、・・・、どのグループにも属さない人がいて、グループはテーブルで管理します。

    また、今のところアクセス制御に必要な情報はFILEテーブルには無く、ファイルを子として関連付ける親カテゴリのテーブルがセキュリティ情報を持つので、上記方法でできたとしても、FileSecurityファンクションが重くならないか心配していましたが、それ以前のところで躓いてしまいました。

    ちなみに、試行運用のため、アプリケーション側でセキュリティを実装済ですが、SQL Server (Expres) 自体が筒抜けではいけないと考えています。

    よろしくお願いします。

    2021年1月4日 13:46

回答

  • https://docs.microsoft.com/ja-jp/sql/relational-databases/security/row-level-security?view=sql-server-ver15

    RLS は Filestream と互換性がありません。


    jzkey

    • 回答としてマーク M14Cluster 2021年1月5日 21:28
    2021年1月4日 13:57

すべての返信

  • https://docs.microsoft.com/ja-jp/sql/relational-databases/security/row-level-security?view=sql-server-ver15

    RLS は Filestream と互換性がありません。


    jzkey

    • 回答としてマーク M14Cluster 2021年1月5日 21:28
    2021年1月4日 13:57
  • jzkey様、コメントありがとうございます。

    世界のSQL Serverが、思いの外できないのですね。

    しかし、他に方法はないか考えなおしたところ、

    今のところアクセス制御に必要な情報はFILEテーブルには無く、ファイルを子として関連付ける親カテゴリのテーブルがセキュリティ情報を持つ」という条件もあるので、FILEテーブル直接のSELECTは許可せず、親テーブルとINNER JOINしたビューを作ることで、なんとか出来そうです。

    ありがとうございました。

    2021年1月5日 21:28
  • 訂正です。

    出来たことに違和感はあったのですが、ファイルのIDさえ分かれば読めてしまうので、セキュリティとしてはナンセンスでした。

    何もしないよりは良いのですが、今どきの厳しいセキュリティ要求に合いません。

    GET_FILESTREAM_TRANSACTION_CONTEXT()がファイルに関連づいて発行され、ワンタイムパスワード的な役割を果たすものと思い込んでいましたが、ファイルと関係なく発行されるので、結局のところ、ファイルストリームのアクセス権を分けたい場合は、テーブルを分けるしかないと理解しました。(あまりに煩雑なので分けたくはありません)

    今回の開発の参考にしている既存のPLM(Webアプリ)は SQL Server (Express) を使っていますが、ファイルストリームを使っておらず、UUID名のサブフォルダに格納されています。今回開発のアプリケーションは、このSQL Server にアクセスすることから始めたので、当初はこのフォルダーを共有設定し、サブフォルダのみアクセス権を与えることで一定のセキュリティを確保していました。

    しかし、総当たり攻撃をブロックできないので、最終形ではきちんとしたセキュリティを確保したくてファイルストリームにしたのですが、総当たり攻撃を想定すると同レベルか、ファイルストリームのI/Fが公開されている分、かえって不利にも思えます。

    もっとも、セキュリティもどこまで要求するかも難しいところで、社内LANはほぼ暗号化されていないので、ネットワークパケットを傍受する技術があればいくらでも見放題のはずですが、そんな技術は持っていないだろうという仮定の下に成り立っています。ファイルストリームをAPIレベルで扱う技術を持っていることを想定するのがバランスが悪い気もします。

    そう考えると、コマンドラインに平文パスワードを書いているので他ユーザの見放題のシステムに私が気付いたからといって責めるのもパワハラなのか?と思ったりもしますし、実装済のアプリケーションレベルのセキュリティで十分なのかもしれません。

    お騒がせしました。

    2021年1月6日 21:28