我正在使用Npgsql,我想知道是否有一种方法可以使用集成安全性连接到PostgreSQL服务器,并自动回退到公共登录?或者,也许还有另一种方式去做我想要达到的目标。使用集成安全性连接到PostgreSQL或退回到公共登录
我有一个使用Windows身份验证的ASP.NET网站(IIS7.5),并且我配置了PostgreSQL以允许通过SSPI访问,只要数据库中存在正确名称的角色,就可以正常工作。该网站可供内部网上的每个人查看,但有些用户具有其他人无法做到的一些额外功能(或可看到额外数据)。
目前,我使用类似以下内容:
NpgsqlConnectionStringBuilder csb = new NpgsqlConnectionStringBuilder();
csb.Pooling = false; // if true, causes intermittent DB connection issues
csb.Database = "dbname";
csb.Host = "192.168.1.100";
csb.IntegratedSecurity = true;
dbconn.ConnectionString = csb.ConnectionString;
try
{
dbconn.Connect();
}
catch (NpgsqlException ex)
{
if (/* check for authentication failed */)
{
csb.IntegratedSecurity = false;
csb.UserName = "www-read";
dbconn.ConnectionString = csb.ConnectionString;
dbconn.Open();
}
}
这工作正常,但每次回落到了“WWW读”的作用时间,它增加了一个关键的日志条目说,有是一个认证错误。我能看到的唯一方法是通过www-read连接并查询是否存在适当的集成安全角色并重新连接,但这似乎比上述更为麻烦。
我不使用密码进行集成安全性,因为它是自动处理的(这是集成安全性的全部目的)。我在上面的代码中省略了密码,因为它不相关,上面只是为了展示我正在做什么。无论如何,问题不在于登录,问题是我希望自动回退到非集成安全性*,而不必捕捉异常或导致PostgreSQL将其记录为致命错误。 – dreamlax
啊,对不起,我误解了你的问题。但是,嘿,我的食谱应该工作,如果你想要实际的解决方案! :-) – mvp
是的,这是有用的信息,但:) :) – dreamlax