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

时间:2016-08-03 16:36:39

标签: c# sql-server connection-string

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

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

1 个答案:

答案 0 :(得分:7)

对于您的网络应用,您使用的是实体框架吗? 对于你的DbContext,你使用的是IdentityDbContext吗?

如果是这样,我遇到了同样的问题。我能够直接与SqlConnection连接,但遇到了一个" Access Deny"与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连接到DB时需要更多权限。