我有一个数据库,在那里我创建了一个包含的用户,我需要使用该用户连接到我的web应用程序。我一直能够使用具有Persist Security Info=False
的标准用户连接到web应用程序。
然而,我能够与包含的用户连接的唯一方法是将我的连接字符串更改为Persist Security Info=True
,否则即使我能够使用SSMS进行连接,我也会收到登录失败的sql异常。我不知道它为什么有效,有人知道为什么一个包含的用户需要将属性设置为True吗?
对于您的web应用程序,您是否在使用实体框架?对于您的DbContext,您是否使用IdentityDbContext
?
如果是这样的话,我也有同样的问题。我能够直接与SqlConnection连接,但在与实体框架连接时遇到"拒绝访问"错误。当我给我的用户足够的权限时,所有的查询都很慢。
当实例化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时,连接速度较慢,用户需要更多权限的原因。