为什么包含数据库用户需求Persist Security Info = True

mon*_*ica 8 c# sql-server connection-string

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

但是,我能够与所包含的用户连接的唯一方法是将我的连接字符串更改为Persist Security Info=True,否则即使我能够使用SSMS连接,我也会获得登录失败的sql异常.我不确定它为什么会起作用,是否有人知道为什么包含的用户需要将属性设置为True?

小智 9

对于您的Web应用程序,您使用的是Entity Framework吗?你使用的是DbContext IdentityDbContext吗?

如果是这样,我有同样的问题.我能够直接与SqlConnection连接,但在与Entity Framework连接时遇到"访问拒绝"错误.当我向用户提供足够的权限时,所有查询都非常慢.

在实例化Context(with IdentityDbContext)时,应将第二个参数设置为false.

public AdeleDbContext(string connectionString) : base(connectionString, false)
{
}
Run Code Online (Sandbox Code Playgroud)

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

这就是连接速度慢的原因,用户在使用Entity Framework和IdentityDbContext连接到DB时需要更多权限.