sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2012 で trustworthy =on を設定することのセキュリティ リスク

    TRUSTWORTHY データベースのプロパティ (ON に設定されている場合) ) は、基本的に、そのデータベース内に含まれ、偽装されたコンテキストで実行されるコードが、その偽装されたセキュリティ コンテキストを維持しながら、そのデータベースの外部にアクセスできるようにする必要があることを SQL Server に宣言します。また、すべてを許可します そのデータベースの SQLCLR アセンブリを EXTERNAL_ACCESS に設定する と UNSAFE 、そのコードがサーバーの外部に到達するかどうか (外部の意味:ネットワーク アクセス、ファイル システム アクセス、レジストリ アクセス、環境アクセスなど)。

    これは、データベース内のすべてのコードをカバーするため、これを可能にするかなり一般的な手段です。証明書や非対称キーを使用してモジュール (proc やアセンブリ) に署名すると、どのコードにどの権限が付与されるかをより細かく制御できます。

    データベースを TRUSTWORTHY に設定する また、このデータベースで開始するすべてのプロセスが、サーバーレベルおよび/または他のデータベースに到達できるようにします。通常、プロセスは開始されたデータベースに限定/隔離されます。データベースが「sa」ログインによって所有されている場合、そのデータベースで開始され、「dbo」として実行されているすべてのプロセスは、実質的に「sa」特権を持ちます (いいね!)。

    なりすましの詳細を完全に伝えるために必要な詳細をここで説明しようとするのではなく、このトピックに関する次のリソースを熟読することをお勧めします:

    データベースを TRUSTWORTHY に設定することは避けるべきです できるだけ。本当にマルチスレッド/非同期呼び出しが必要で、ソース コードがあり、アセンブリをコンパイルしている場合、SET TRUSTWORTHY ON を使用する理由が思いつきません。 オプション。代わりに、パスワードを使用してアセンブリに署名する必要があります 次のコマンドを使用して、EXTERNAL_ACCESS を許可する優先方法を設定します。 と UNSAFE アセンブリ:

    USE [master];
      CREATE ASYMMETRIC KEY [ClrPermissionsKey]
        AUTHORIZATION [dbo]
        FROM EXECUTABLE FILE = 'C:\path\to\my\assembly.dll';
    
    CREATE LOGIN [ClrPermissionsLogin]
      FROM ASYMMETRIC KEY [ClrPermissionsKey];
    
    GRANT UNSAFE ASSEMBLY TO [ClrPermissionsLogin];
    

    配置したら、アセンブリが読み込まれて実行されたデータベースに移動できます。

    ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;
    

    または、WITH PERMISSION_SET = UNSAFE を含めることもできます CREATE ASSEMBLY の最後に コマンド。



    1. スキーマプレフィックス(Postgres + PHP)を使用せずにスキーマ内のテーブルにアクセスするにはどうすればよいですか?

    2. ユーザーをさまざまな組織、大学、さまざまな役割を持つ企業にバインドするにはどうすればよいですか?

    3. MySQLサーバー接続は暗号化されて安全ですか?

    4. XAMPPセットアップ-MySQLが機能しない