データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

SQLServer2016の行レベルのセキュリティ

Microsoft®はSQLServer®のセキュリティに重点を置いており、ほとんどすべてのリリースで既存の機能が強化されているか、新しいセキュリティ機能が導入されています。 SQL Server 2016で、Microsoftは、行レベルのセキュリティ、AlwaysEncrypted、動的データマスキングなど、ユーザーがデータを保護するのに役立つ多くの新しいセキュリティ機能を導入しました。

はじめに

以前のブログでは、SQL Server 2016の動的データマスキングについて書きました。このブログでは、テーブル内の行にアクセスできるユーザーを制御できる行レベルのセキュリティ(RLS)機能を紹介します。 RLSを使用すると、クエリを実行しているユーザーの特性に基づいてデータに制限を実装できます。 RLSは、さまざまなユーザーの完全な透過性を備えたデータへのアクセスを簡単に制御するのに役立ちます。

RLSの必要性

選択したデータのみを選択したユーザーに返す必要がある場合があります。これまでは、ビューを作成し、それらのビューに対するユーザーに選択権限を付与することでこれを行っていました。ただし、そのアプローチは、増大するデータ量とユーザー数に対応するために必要なビューの数によって管理できなくなりました。そこで、Microsoftは新しい状況でのセキュリティ要件を満たすためにRLSを導入しました。

RLSを使用すると、テーブル内の行へのアクセスをきめ細かく制御できるため、アプリケーションに対して完全に透過的に、どのユーザーがどのデータにアクセスできるかを簡単に制御できます。

この機能を使用すると、現在のユーザーアクセス権ではなく、クエリの実行コンテキストに基づいて行がフィルタリングされます。次の画像に示すように、テーブルの柔軟で堅牢なセキュリティポリシーを設計することにより、安全なロジックルールを作成して、どのユーザーがどの行を表示し、任意の行(またはデータ)を制限できるかを判断できます。

SQLServer2016の行レベルのセキュリティ

画像ソース: https://sqlwithmanoj.com/2015/07/13/implementing-row-level-security-rls-with-sql-server-2016/

RLSプロパティ

RLSには次のプロパティがあります:

  • きめ細かいアクセスロール(特定の行への読み取りアクセスと書き込みアクセスの両方を制御)
  • アプリケーションの透過性(アプリケーションの変更は必要ありません)
  • データベース内でアクセスを一元化する
  • 実装と保守が簡単
RLSの仕組み

RLSを実装するには、次の要素を考慮する必要があります。

  • 述語関数
  • セキュリティ述語
  • セキュリティポリシー

次のセクションでは、これらのアイテムについて説明します。

述語関数

述語関数は、クエリを実行するユーザーが、定義されたロジックに基づいてデータにアクセスできるかどうかをチェックするインラインテーブル値関数です。この関数は1を返します ユーザーがアクセスを許可されている行ごとに。

セキュリティ述語

セキュリティ述語は、述語関数をテーブルにバインドするのに役立ちます。RLSは、2種類のセキュリティ述語をサポートします。フィルター述語とブロック述語です。フィルタ述語は、述語関数で定義されたロジックに従って、次の操作でエラーを発生させることなく、データをサイレントにフィルタリングします。

  • SELECT
  • UPDATE
  • DELETE

ブロック述語は明示的にエラーを発生させ、ユーザーが述語関数ロジックに違反するデータに対して次の操作を使用することをブロックします。

  • 挿入後
  • 更新後
  • 更新前
  • 削除前
セキュリティポリシー

述語関数を参照するすべてのセキュリティ述語をグループ化するRLS用にセキュリティポリシーオブジェクトが作成されます。

ユースケース

RLSの使用方法のいくつかの設計例を次に示します。

  • 病院は、看護師が患者のデータ行のみを表示できるようにするセキュリティポリシーを作成できます。
  • 銀行は、従業員の事業部門または会社での役割に基づいて、財務データ行へのアクセスを制限するポリシーを作成できます。
  • マルチテナントアプリケーションは、各テナントのデータ行を他のすべてのテナントの行から論理的に分離するためのポリシーを作成できます。テナントからのデータは単一のテーブルに保存されるため、プロセスはより効率的です。各テナントはそのデータ行のみを表示できます。
RLSを実装する

以下は、RLSを実装する方法の例です。

ステップ1:次のコードを実行して、データベース RowFilterを作成します と2人のユーザーがテストします:

CREATE DATABASE RowFilter;
GO
USE RowFilter;
GO
CREATE USER userBrian WITHOUT LOGIN;
CREATE USER userJames WITHOUT LOGIN;
GO

手順2:次のコードを実行して、例を含むテーブルを作成し、新しいユーザーにSELECT権限を付与します。

CREATE TABLE dbo.SalesFigures (
[userCode] NVARCHAR(10),
[sales] MONEY)
GO
INSERT  INTO dbo.SalesFigures
VALUES ('userBrian',100), ('userJames',250), ('userBrian',350)
GO
GRANT SELECT ON dbo.SalesFigures TO userBrian
GRANT SELECT ON dbo.SalesFigures TO userJames
GO

手順3:次のコードを実行して、フィルター述語関数を追加します。

CREATE FUNCTION dbo.rowLevelPredicate (@userCode as sysname)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS rowLevelPredicateResult
WHERE @userCode = USER_NAME();
GO

ステップ4:次のコードを実行して、テーブルにフィルター述語を追加します dbo.SalesFigures

CREATE SECURITY POLICY UserFilter
ADD FILTER PREDICATE dbo.rowLevelPredicate(userCode)
ON dbo.SalesFigures
WITH (STATE = ON);
GO

ステップ5:次のコードを実行して、ステップ2で追加されたユーザーで結果をテストします:

EXECUTE AS USER = 'userBrian';
SELECT * FROM dbo.SalesFigures;
REVERT;
GO

このコードは、以下に示すように2つの行を返します。

SQLServer2016の行レベルのセキュリティ (/article/uploadfiles/202207/2022070812111051.png)

EXECUTE AS USER = 'userJames';
SELECT * FROM dbo.SalesFigures;
REVERT;
GO

このコードは、次のように1行を返します。

SQLServer2016の行レベルのセキュリティ (/article/uploadfiles/202207/2022070812111024.png)

権限

セキュリティポリシーを作成、変更、または削除するには、他のセキュリティポリシーが必要です。 許可。

セキュリティポリシーを作成または削除するには、 ALTER が必要です スキーマの許可。

さらに、各述語には、追加される次の権限が必要です。

  • SELECT および参考資料 述語として使用される関数の権限。
  • 参考資料 ポリシーにバインドされているターゲットテーブルに対する権限。
  • 参考資料 引数として使用されるターゲットテーブルのすべての列に対するアクセス許可。

セキュリティポリシーは、データベース内のデータベース所有者(DBO)ユーザーを含むすべてのユーザーに適用されます。 DBOユーザーは、セキュリティポリシーを変更または削除できます。ただし、セキュリティポリシーへの変更は監査できます。 sysadminなどの特権の高いユーザーの場合 またはdb_owner 、データのトラブルシューティングまたは検証を行うには、すべての行を表示する必要があるため、それを許可するセキュリティポリシーを作成する必要があります。

SCHEMABINDING =OFFでセキュリティポリシーが作成された場合 、次にユーザーは SELECTを持っている必要があります またはEXECUTE 述語関数、および述語関数内でターゲットテーブルをクエリするために使用される追加のテーブル、ビュー、または関数に対する権限。 SCHEMABINDING =ONでセキュリティポリシーが作成された場合 、これがデフォルトである場合、ユーザーがターゲットテーブルにクエリを実行すると、これらの権限チェックはバイパスされます。

SQL Server2016RLSの変更

ポリシーのSQLServerRLSを無効にするには、次のアクションを実行します。

  • セキュリティポリシーを変更するUseFilter State =offを使用 。

フィルタとセキュリティポリシーを削除するには、次のアクションを実行します。

  • セキュリティポリシーを削除するUseFilter
  • ドロップ関数dbo.rowlevelPredicate
ベストプラクティス

Microsoftは、次のベストプラクティスを提案しています。

  • RLSオブジェクト(述語関数とセキュリティポリシー)用に別のスキーマを作成することを強くお勧めします。
  • その他のセキュリティポリシー 権限は、高度な特権を持つユーザー(セキュリティポリシーマネージャーなど)を対象としています。セキュリティポリシーマネージャはSELECTを必要としません 彼らが保護するテーブルの許可。
  • 潜在的なランタイムエラーを回避するために、述語関数での型変換は避けてください。
  • パフォーマンスの低下を避けるために、可能な限り述語関数の再帰を避けてください。クエリオプティマイザは、直接再帰を検出しようとします。ただし、間接的な再帰(2番目の関数が述語関数を呼び出す場合など)を見つけることは保証されていません。
  • パフォーマンスを最大化するために、述語関数で過度のテーブル結合を使用することは避けてください。

RLSの制限と制限

以下は、RLSに適用されるいくつかの制限です。

  • 述語関数は、 SCHEMABINDINGを使用して作成する必要があります 。 SCHEMABINDINGなしで関数が作成された場合 、そしてそれをセキュリティポリシーにバインドしようとすると、エラーがスローされます。
  • RLSが実装されているテーブルにインデックス付きビューを作成することはできません。
  • インメモリテーブルはRLSではサポートされていません。
  • フルテキストインデックスはサポートされていません。
結論

SQL Server 2016のRLS機能を使用すると、アプリケーションレベルで変更を加えることなく、データベースレベルでレコードのセキュリティを提供できます。データベース内のDataManipulationLanguage(DML)コードを変更することなく、既存のコードに加えて述語関数と新しいセキュリティポリシー機能を使用してRLSを実装できます。

[フィードバック]タブを使用して、コメントを書き込んだり、質問したりします。

専門家による管理、管理、構成で環境を最適化する

Rackspaceのアプリケーションサービス(RAS) 専門家は、幅広いアプリケーションポートフォリオにわたって次の専門的かつ管理されたサービスを提供します。

  • eコマースおよびデジタルエクスペリエンスプラットフォーム
  • エンタープライズリソースプランニング(ERP)
  • ビジネスインテリジェンス
  • Salesforceの顧客関係管理(CRM)
  • データベース
  • メールホスティングと生産性

お届けします:

  • 偏りのない専門知識 :私たちは、即時の価値を提供する機能に焦点を当てて、お客様の近代化の旅を簡素化し、導きます。
  • 狂信的な経験 ™:最初にプロセスを組み合わせます。テクノロジーセカンド。包括的なソリューションを提供するための専用のテクニカルサポートを備えたアプローチ。
  • 比類のないポートフォリオ :豊富なクラウドエクスペリエンスを適用して、適切なテクノロジーを適切なクラウドに選択して導入できるようにします。
  • アジャイルデリバリー :私たちはあなたがあなたの旅の途中であなたに会い、あなたの成功と一致します。

今すぐチャットして始めましょう。


  1. 統合データプラットフォーム:SQL Server 2019

    2006年、英国の数学者Clive Robert Humbyは、「データは新しい石油です」という言葉をマークしました。それ以来、ITリーダーはこれを繰り返し聞き、アイデアに共感し、あらゆる段階で拡張編集を行ってきました。 クライブはさらに次のように付け加えました。「データは価値がありますが、洗練されていないと実際には使用できません。収益性の高い活動を推進する価値のあるエンティティを作成するには、wayOilをガス、プラスチック、化学薬品などに変更する必要があります。そのため、データに価値を持たせるには、データを分析して分析する必要があります。」 ITリーダーはこれ以上同意できず、データから

  2. MS Access から SQL Server データベースにデータを移行する

    最近、データベースが大きくなりすぎて Access で処理できなくなったため、Access データベースから SQL Server 2014 にデータを移行する必要がありました。プロセスはかなり単純ですが、段階的な手順を記載した記事を書こうと思いました. まず、コンピューターに SQL Server または SQL Server Express がインストールされていることを確認する必要があります。 PC に SQL Server Express をダウンロードする場合は、必ず Advanced Services を含むバージョンをダウンロードしてください。 .そうしないと、データベース エ