我正在使用 Npgsql,我想知道是否有一种方法可以使用自动回退到公共登录的集成安全性连接到 PostgreSQL 服务器?或者也许还有另一种方法可以做我想要实现的目标。
我有一个使用 Windows 身份验证的 ASP.NET 网站 (IIS7.5),并且我已将 PostgreSQL 配置为允许通过 SSPI 访问,只要数据库中有一个名称正确的角色,它就可以正常工作。该网站可供 Intranet 上的每个人查看,但有些用户有一些其他人不应该具备的额外能力(或可以查看额外数据)。
目前,我正在使用以下内容:
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-read”角色时,它都会添加一个关键日志条目,说明存在身份验证错误。我能看到的唯一方法总是通过 www-read 连接并查询是否存在合适的集成安全角色并重新连接,但这似乎比上述更麻烦。