为什么包含数据库用户需要设置Persist Security Info=True?

9

我有一个数据库,我创建了一个包含用户,并需要使用该用户连接到我的Web应用程序。以前我一直能够使用标准用户连接到Web应用程序,其具有Persist Security Info=False

然而,我只能通过更改连接字符串为Persist Security Info=True才能使用包含的用户进行连接,否则我会得到一个登录失败的SQL异常,尽管我可以使用SSMS进行连接。我不确定为什么它能正常工作,有人知道为什么需要将该属性设置为True吗?


看一下这个 https://dev59.com/gF0a5IYBdhLWcg3wW3nN - Mihir Kale
这个问题帮助我们修复了连接字符串,使我们能够使用包含用户连接到Azure。 - sfm
1个回答

9

对于你的web应用程序,你是否使用了Entity Framework? 并且你的DbContext是否使用了IdentityDbContext

如果是这样,我曾经遇到过同样的问题。我能够直接使用SqlConnection进行连接,但是在使用Entity Framework进行连接时遇到了“拒绝访问”的错误。 当我给我的用户足够的权限后,所有的查询都变得非常慢。

在实例化Context(使用IdentityDbContext)时,你应该将第二个参数设置为false。

public AdeleDbContext(string connectionString) : base(connectionString, false)
{
}

第二个参数是throwIfV1Schema,当设置为true(默认值)时,它将通过调用SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=@Table对许多列的数据库模式进行验证。

这就是使用Entity Framework和IdentityDbContext连接到数据库时,连接速度变慢且需要更多权限的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接