我很难找到有关如何让RavenDB在网络上运行的信息。在同一个网络中,我可以运行我的应用程序实例,它将显示来自我的RavenDB的数据。但是,当我尝试写入数据时,我得到了401 Unauthorized异常。
设置通过网络访问的RavenDB的正确方法是什么?
现在,我在 Raven.Server.exe.config 中有这个,这只是一个短期解决方案:
<add key="Raven/AnonymousAccess" value="All" />
我不明白的是,RavenDB网站说要使用这样的东西:
<connectionStrings>
<add name="RavenDb"
connectionString="Url=http://serverName:8080;user=user;password=password"/>
</connectionStrings>
好的,这对正在运行的应用程序很有用,但是如何设置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)未经授权。”
场景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)未经授权。” 内部异常:“目标主体名称不正确”
答案 0 :(得分:7)
在机器上创建本地用户RavenDB运行并使用您想要的任何凭据。然后为此用户分配/ Data目录(和/ Tenants目录,如果需要)的读/写权限。
如果您将RavenDB作为服务或独立应用程序运行,则远程身份验证应与(Windows)用户凭据一起使用。如果您在IIS上运行,请确保启用了Windows身份验证(默认情况下已禁用!)。
答案 1 :(得分:4)
对我来说,我必须将域添加到prod机器上的连接字符串,但是当远程访问同一台机器时却不...我不知道。
值得注意的是:我创建了一个名为RAVENDB的Windows用户,并为其分配了对数据目录的完全权限。
所以我的连接字符串远程工作正常
<add name="raven" connectionString="Url=http://myserver.com:8080;user=RAVENDB;password=PASS" />
而在实际的服务器上,我不得不使用
<add name="raven" connectionString="Url=http://myserver:8080;DOMAIN=MYSERVERNAME;user=RAVENDB;password=PASS" />
答案 2 :(得分:3)
鲍勃, 默认情况下,RavenDB使用Windows身份验证。因此,如果您在服务器计算机上创建用户,它将接受它。 另一种方法是定义ravendb特定用户,但很多人只使用Windows Auth。