SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Database の行レベルセキュリティについての情報

leave a comment

SQL Database では現状、プレビューではありますが、行単位にアクセス制御を行うための行レベルセキュリティ (RLS)を利用することができます。

海外の SQL Server Security Blog で RLS について興味深い投稿がありましたのでメモとして。

Row-Level Security: Blocking unauthorized INSERTs
Row-Level Security: Performance and common patterns

細かな内容は えろす師匠 に聞くとよいかと思います。

最初の情報は、RLS の INSERT の制御になります。
RLS では、SELECT / UPDATE / DELETE のような条件の指定が可能なものについてはフィルターをすることができますが、INSERT についてはフィルターをすることができません。

INSERT の制御については、制約やトリガーを用いる必要があるのですがそのための方法について記載されています。
チェック制約の中で関数を呼び、その関数の中で述語関数を呼ぶことで、INSERT の制御をしているようですね。

2 つ目の情報は RLS のパフォーマンスとなります。
RLS ではインデックスの利用も考慮されているため、パフォーマンスを意識するとインデックスについても考慮が必要となってきます。

RLS が設定されていない状態では以下のような実行プランとなります。
image

単純に RLS を設定すると以下のようにフィルターが行われます。
image

非クラスターかインデックスが設定されている場合、設定状況によっては以下のように Missing Index の情報が出力されることがあります。

image

また、インデックスの設定状況によっては、RLS が有効になっていても以下のようにフィルターがされずに検索が行われることもありますので、RLS を使用する場合はインデックスの設定状況も意識したほうがよさそうですね。
image

Written by masayuki.ozawa

4月 29th, 2015 at 11:39 pm

Posted in SQL Database

Tagged with

Leave a Reply

*