web-dev-qa-db-ja.com

SQL Serverのログ配布で、セカンダリではなくプライマリへのアクセスを許可する

ユーザーがセカンダリサーバー上のログ配布されたDBに対する権限を必要とするが、プライマリサーバー上の権限は必要ないという奇妙な状況があります。問題は、ログインが、ログ配布されたDB以外のプライマリサーバー上の他の多くのDBにアクセスでき、それを維持する必要があることです。私の環境はSQL Server 2012 EEです。

これを達成することは可能ですか?

私が試みた回避策として、バックアップログ配布が開始する直前にプライマリDBに一時的なアクセスを許可し、バックアップが完了したらそれを削除するステップを追加しました。しかし、この回避策の問題は、ログバックアップの直前にユーザーにアクセスを許可しようとすると、ユーザーは引き続き出荷されたプライマリログDBにアクセスできることです。どんな助けでも大歓迎です。

3
SQLPRODDBA

プライマリ上

  • 新しいログインを作成[testLogin]と新しいユーザー[testUser]必要な権限と役割を使用:

    USE [master]
    GO
    CREATE LOGIN [testLogin] WITH PASSWORD=N'test123'
        , DEFAULT_DATABASE=[Test], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
    GO
    USE [Test]
    GO
    CREATE USER [testUser] FOR LOGIN [testLogin];
    GO
    USE [Test]
    GO
    ALTER ROLE [db_datareader] ADD MEMBER [testUser];
    GO
    

これらのログインとユーザーは存在していてはならず、現在のログインとユーザーとは異なっている必要があります。

  • 一度[testUser]はセカンダリで利用可能です。削除してください[testLogin]プライマリから:

    USE [master]
    GO
    DROP LOGIN [testLogin];
    

プライマリの他のオプション

  • 元のログインを削除

短時間でログインを削除する必要がある場合は、更新を計画し、まずそれらを切断する必要があります。

  • 同じ名前で新しいログインを作成する

    CREATE LOGIN...
    
  • 孤立したユーザーを、ログ配布されたDBを除くすべてのDBの新しく作成されたログインにリンクします。

    USE [DB1]
    GO
    sp_change_users_login @Action='update_one'
        , @UserNamePattern='testUser'
        , @LoginName='testLogin';
    

セカンダリ[testLogin]

  • 新しいログインを作成する[testLogin]

    USE [master]
    GO
    CREATE LOGIN [testLogin] WITH PASSWORD=N'test123'
         , DEFAULT_DATABASE=[Test], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
    GO
    
  • 孤立したユーザーをリンクする[testUser](プライマリから出荷)新しいログイン[testLogin]

    USE [Test]
    GO
    sp_change_users_login @Action='update_one'
        , @UserNamePattern='testUser'
        , @LoginName='testLogin';
    
1