0

インストーラー クラスから LocalDB にデータベースをインストールしようとしています。SQLConnection を開こうとすると、次のエラーが表示されます。

Login failed for user 'NT AUTHORITY\SYSTEM'

インストーラー クラスはシステム アカウントから実行されているようで、LocalDB は使用できません。

インストーラーから LocalDB に接続する方法はありますか?

ユーザー アカウントからインストーラー クラス (またはその中のコードの一部) を実行することは可能でしょうか (ただし、インストーラーの残りのアクションには管理者権限が必要です)。

インストーラーはさまざまなマシンで使用できるため、ユーザーの資格情報を事前に知ることはできず、インストーラー クラス コード (C#) からのみ手動でシステムを変更することはできません。

4

1 に答える 1

0

私はこの問題を解決しておらず、LocalDB をあきらめました。ただし、しばらくして同様の問題が発生しました-WindowsサービスからLocalDBに接続します。Windows サービスは同じNT AUTHORITY\SYSTEMアカウントから実行されるため、この場合は同じソリューションが役立つ場合があります。

解決策は、LocalDB 共有インスタンスを使用することです。インスタンスはSqlLocalDB ユーティリティで管理されます。

  1. 新しい LocalDB インスタンスを作成します。

    SqlLocalDB.exe create "InstanceName"
    
  2. インスタンスを共有します。

    SqlLocalDB.exe share "InstanceName" "SharedInstanceName"
    
  3. インスタンスを開始します。

    SqlLocalDB.exe start "InstanceName"
    
  4. 共有インスタンスの名前.\SharedInstanceNameは であるため、接続文字列では のようになります(localdb)\.\SharedInstanceName。以下を使用してインスタンス名を見つけることができます。

    SqlLocalDB.exe info
    
  5. sqlcmd ユーティリティを使用してインスタンスに接続し、NT AUTHORITY\SYSTEMユーザーを SQL ユーザーに追加して、適切な権限を設定します。

    sqlcmd.exe -S (localdb)\.\SharedInstanceName -i "<path-to-SQL-file>"
    

    SQL ファイルの内容:

    CREATE LOGIN [NT AUTHORITY\SYSTEM] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
    GO
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [NT AUTHORITY\SYSTEM]
    GO
    


    仮定 (確認していません):何らかの理由で SQL インストーラー クラスがNT AUTHORITY\SYSTEMアカウントから実行されているように見えるため、インストーラー クラスから上記の手順を実行しようとすると、手順 5 で接続しようとすると失敗する可能性が高くなります。インスタンスに。そのため、この手順は別の方法で実行する必要があります。たとえば、インストーラー クラスを実行する前に.bat、インストーラーから直接実行するファイルから実行する必要があります。

于 2015-02-02T07:18:50.697 に答える