2011-12-29 6 views
14

RavenDBをネットワーク上で動作させる方法に関する情報を見つけるのが難しいです。同じネットワーク内で、私のアプリケーションのインスタンスを実行させることができ、それは私のRavenDBからのデータを表示します。しかし、データを書き込もうとすると、401 Unauthorized例外が発生します。RavenDB Network Access

RavenDBをネットワーク経由でアクセスするように設定する正しい方法は何ですか?

は今のところ、私は短期的な解決策であるRaven.Server.exe.config、でこれを持っている:

<add key="Raven/AnonymousAccess" value="All" /> 

私は理解していない何を、ということは、RavenDBのWebサイトですこのようなものを使用すると言う:

<connectionStrings> 
    <add name="RavenDb" 
     connectionString="Url=http://serverName:8080;user=user;password=password"/> 
</connectionStrings> 

[OK]を、それが実行しているアプリケーションのための素晴らしいことだが、どのように私は、ユーザー名とパスワードを許可するようにRavenDBサーバを設定するのですか?これを行うにはちょうど間違った方法ですか(何とかRavenDB設定ファイルを設定してその資格情報を許可する)のですか?それが間違っている場合、どのようにサーバー側で資格情報を定義することになっていますか?

編集:私はダブルクリックRaven.Server.exeでRavenDBを実行している

:ここでは私の試みと結果です。

シナリオ1

クライアントのapp.config:

<connectionStrings> 
    <add name="RavenDb" connectionString="Url = http://server:8080;domain=Xx;user=Xx\user;password=pw"/> 
    </connectionStrings> 

のDocumentStoreセットアップ:

DocumentStore documentStore = new DocumentStore(); 
documentStore.ConnectionStringName = "RavenDb"; 
documentStore.Initialize(); 

保存操作:

Session.Store(objectToSave); 

結果: "リモートサーバーからエラーが返されました:(401)Unauthorized"

シナリオ2

クライアントのapp.config:

<add key="databaseUrl" value="http://server:8080"/> 

のDocumentStoreセットアップ:

string databaseUrl = ConfigurationManager.AppSettings["databaseUrl"];    
DocumentStore documentStore = new DocumentStore(); 
documentStore.Url = databaseUrl; 
documentStore.Initialize(); 

保存操作:

Session.Store(objectToSave); 

結果: "リモートサーバーからエラーが返されました:(401)Unauthorized" 内部例外: "ターゲットプリンシパル名が正しくありません"

答えて

7

RavenDBが実行されているマシンでローカルユーザーを作成し、必要な資格情報を使用します。次に、/ Dataディレクトリ(および必要に応じて/ Tenantsディレクトリ)の読み取り/書き込みアクセス許可をこのユーザーに割り当てます。

サービスまたはスタンドアロンアプリケーションとしてRavenDBを実行している場合、リモート認証は(Windows)ユーザの認証情報で動作するはずです。IISで実行している場合は、Windows認証が有効になっていることを確認してください(デフォルトでは無効になっています)。

+0

を使用していたのに対し、そのリモートでうまく働いた私の接続文字列が

<add name="raven" connectionString="Url=http://myserver.com:8080;user=RAVENDB;password=PASS" /> 

ました。私はサーバーの設定でユーザーを指定する必要はありません。クライアント接続は、設定でユーザーを指定することができ、そのユーザーがデータフォルダにアクセスできる限り、私はそれを試してみます。 –

+0

そうですね。 –

+0

2つのアプローチを試みました。上記のシナリオ/編集を参照してください。私は何が欠けていますか? –

3

Bob、 デフォルトでは、RavenDBはWindows認証を使用します。したがって、サーバーマシン上でユーザーを作成すると、それを受け入れます。 ravendb特有のユーザーを定義する代わりに、多くの人がWindows認証を使用するだけです。

+0

2つのアプローチを試してみましょう。上記のシナリオ/編集を参照してください。私は何が欠けていますか? –

4

私の場合は、prodマシンの接続文字列にドメインを追加する必要がありましたが、同じマシンにリモートからアクセスするときはドメインを追加する必要がありました...私はうんざりです。

注:私はRAVENDBという名前のWindowsユーザーを作成し、データディレクトリにそのすべての権限を割り当てました。

実際のサーバー上で、私はそれだけでDataフォルダへの権限ですので... AHHHHH

<add name="raven" connectionString="Url=http://myserver:8080;DOMAIN=MYSERVERNAME;user=RAVENDB;password=PASS" /> 
+0

+1ドメイン=本当に必要なものでした –

+0

+1:多くの感謝! –