[英]How to implement ASP.NET identity: CREATE DATABASE permission denied in database 'master'
First of all, I already checked here: ASP.Net Identity how to set target DB? 首先,我已经在这里查了一下: ASP.Net Identity如何设置目标DB?
I'm now getting this error 我现在收到这个错误
CREATE DATABASE permission denied in database 'master'.
数据库“master”中的CREATE DATABASE权限被拒绝。
On this line of code: 在这行代码上:
Dim user As User = manager.Find(Trim(Username.Text), Trim(Password.Text))
Full error: 完整错误:
[SqlException (0x80131904): CREATE DATABASE permission denied in database 'master'.]
[SqlException(0x80131904):数据库'master'中的CREATE DATABASE权限被拒绝。
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) +3249852
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +345
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4927
System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) +1287
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSourceSystem.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action
1 wrapCloseInAction) +3249852
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +345
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4927
System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) +1287
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 wrapCloseInAction) +3249852
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +345
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4927
System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) +1287
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 wrapCloseInAction) +3249852
1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +367
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +345
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4927
System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) +1287
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 wrapCloseInAction) +3249852
1 completion,String methodName,Boolean sendToPipe,Int32 timeout,Boolean asyncWrite)+367
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +345
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4927
System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) +1287
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +386System.Data.SqlClient.SqlCommand.ExecuteNonQuery()+386
System.Data.Entity.Infrastructure.Interception.InternalDispatcher1.Dispatch(TTarget target, Func
3 operation, TInterceptionContext interceptionContext, Action3 executing, Action
3 executed) +965System.Data.Entity.Infrastructure.Interception.InternalDispatcher
1.Dispatch(TTarget target, Func
3操作,TInterceptionContext interceptionContext,Action3 executing, Action
3执行)+965
System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext) +505System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand命令,DbCommandInterceptionContext interceptionContext)+505
System.Data.Entity.SqlServer.<>c__DisplayClass1a.b__19(DbConnection conn) +136System.Data.Entity.SqlServer。<> c__DisplayClass1a.b__19(DbConnection conn)+136
System.Data.Entity.SqlServer.SqlProviderServices.UsingConnection(DbConnection sqlConnection, Action1 act) +347
System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, ActionSystem.Data.Entity.SqlServer.SqlProviderServices.UsingConnection(DbConnection sqlConnection,Action
1 act) +347
System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action1 act) +347
System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action1 act) +347
1 act) +916
System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action1 act) +347
1 act)+916
System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action
System.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(Nullable1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) +117
System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, NullableSystem.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(Nullable
1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) +117
System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) +117
System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) +117
1 commandTimeout, StoreItemCollection storeItemCollection) +212
System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) +117
1 commandTimeout,StoreItemCollection storeItemCollection)+212
System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable
System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection connection) +172System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection连接)+172
System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) +175System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)+175
System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) +116System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)+116
System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func3 createMigrator, ObjectContext objectContext) +121
System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) +169
System.Data.Entity.CreateDatabaseIfNotExistsSystem.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext,Func
3 createMigrator, ObjectContext objectContext) +121
System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) +169
System.Data.Entity.CreateDatabaseIfNotExists3 createMigrator, ObjectContext objectContext) +121
System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) +169
System.Data.Entity.CreateDatabaseIfNotExists3 createMigrator, ObjectContext objectContext) +121
1.InitializeDatabase(TContext context) +257
System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) +169
System.Data.Entity.CreateDatabaseIfNotExists3 createMigrator, ObjectContext objectContext) +121
1.InitializeDatabase(TContext context)+257
System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) +169
System.Data.Entity.CreateDatabaseIfNotExists
System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) +72System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)+72
System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() +483System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()+483
System.Data.Entity.Internal.RetryAction1.PerformAction(TInput input) +177
System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(ActionSystem.Data.Entity.Internal.RetryAction
1.PerformAction(TInput input) +177
System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action1.PerformAction(TInput input) +177
System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action1.PerformAction(TInput input) +177
1 action) +274
System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action1.PerformAction(TInput input) +177
1 action)+274
System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +37System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)+37
System.Data.Entity.Internal.Linq.InternalSet1.Initialize() +76
System.Data.Entity.Internal.Linq.InternalSetSystem.Data.Entity.Internal.Linq.InternalSet
1.Initialize() +76
System.Data.Entity.Internal.Linq.InternalSet1.Initialize() +76
System.Data.Entity.Internal.Linq.InternalSet1.Initialize() +76
1.get_InternalContext() +21
System.Data.Entity.Internal.Linq.InternalSet1.Initialize() +76
1.get_InternalContext()+ 21
System.Data.Entity.Internal.Linq.InternalSet
System.Data.Entity.Infrastructure.DbQuery1.System.Linq.IQueryable.get_Provider() +59
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryableSystem.Data.Entity.Infrastructure.DbQuery
1.System.Linq.IQueryable.get_Provider() +59
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable1.System.Linq.IQueryable.get_Provider() +59
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable1.System.Linq.IQueryable.get_Provider() +59
1 source, Expression
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable1 predicate, CancellationToken cancellationToken) +208
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable1.System.Linq.IQueryable.get_Provider() +59
1 source,Expression
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable1 predicate, CancellationToken cancellationToken) +208
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable1 predicate, CancellationToken cancellationToken) +208
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable1 predicate, CancellationToken cancellationToken) +208
1 source, Expression`1 predicate) +172
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable1 predicate, CancellationToken cancellationToken) +208
1 source,Expression`1谓词)+172
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryableMicrosoft.AspNet.Identity.EntityFramework.d__6c.MoveNext() +502
Microsoft.AspNet.Identity.EntityFramework.d__6c.MoveNext()+502
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +13855856System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+13855856
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +61System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+61
Microsoft.AspNet.Identity.CultureAwaiter1.GetResult() +48
Microsoft.AspNet.Identity.<FindAsync>d__12.MoveNext() +357
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +13855856
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +61
Microsoft.AspNet.Identity.AsyncHelper.RunSync(FuncMicrosoft.AspNet.Identity.CultureAwaiter
1.GetResult() +48
Microsoft.AspNet.Identity.<FindAsync>d__12.MoveNext() +357
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +13855856
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +61
Microsoft.AspNet.Identity.AsyncHelper.RunSync(Func1.GetResult() +48
Microsoft.AspNet.Identity.<FindAsync>d__12.MoveNext() +357
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +13855856
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +61
Microsoft.AspNet.Identity.AsyncHelper.RunSync(Func1.GetResult() +48
1 func) +348
Microsoft.AspNet.Identity.<FindAsync>d__12.MoveNext() +357
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +13855856
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +61
Microsoft.AspNet.Identity.AsyncHelper.RunSync(Func1.GetResult() +48
1 func)+348
Microsoft.AspNet.Identity.<FindAsync>d__12.MoveNext() +357
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +13855856
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +61
Microsoft.AspNet.Identity.AsyncHelper.RunSync(Func
MyApp.Login_identity.UserLogin_Click(Object sender, EventArgs e) in C:\\MyApp\\Login_identity.aspx.vb:168C:\\ MyApp \\ Login_identity.aspx.vb中的MyApp.Login_identity.UserLogin_Click(Object sender,EventArgs e):168
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +11747645System.Web.UI.WebControls.Button.OnClick(EventArgs e)+11747645
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +150System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)+150
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3360System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+3360
I changed the DbContext
initialization in AppModel.vb
to my existing connection string conn1
, which points to the SQL Server database I already converted to the new identity tables. 我将
AppModel.vb
的DbContext
初始化更改为现有的连接字符串conn1
,该字符串指向已转换为新标识表的SQL Server数据库。
My connection string: 我的连接字符串:
<add name="conn1"
connectionString="data source=(local)\sqlexpress;Initial Catalog=myapp;User Id=sa;Password=XXXX;"
providerName="System.Data.SqlClient" />
AppModel.vb
: AppModel.vb
:
Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.EntityFramework
Imports System.Collections.Generic
Imports System.ComponentModel.DataAnnotations
Imports System.Data.Entity
Imports System.Linq
Imports System.Web
Namespace AspnetIdentitySample.Models
Public Class ApplicationUser
Inherits IdentityUser
' HomeTown will be stored in the same table as Users
Public Property HomeTown() As String
Get
Return m_HomeTown
End Get
Set(value As String)
m_HomeTown = Value
End Set
End Property
Private m_HomeTown As String
Public Overridable Property ToDoes() As ICollection(Of ToDo)
Get
Return m_ToDoes
End Get
Set(value As ICollection(Of ToDo))
m_ToDoes = Value
End Set
End Property
Private m_ToDoes As ICollection(Of ToDo)
' FirstName & LastName will be stored in a different table called MyUserInfo
Public Overridable Property MyUserInfo() As MyUserInfo
Get
Return m_MyUserInfo
End Get
Set(value As MyUserInfo)
m_MyUserInfo = Value
End Set
End Property
Private m_MyUserInfo As MyUserInfo
End Class
Public Class MyUserInfo
Public Property Id() As Integer
Get
Return m_Id
End Get
Set(value As Integer)
m_Id = Value
End Set
End Property
Private m_Id As Integer
Public Property FirstName() As String
Get
Return m_FirstName
End Get
Set(value As String)
m_FirstName = Value
End Set
End Property
Private m_FirstName As String
Public Property LastName() As String
Get
Return m_LastName
End Get
Set(value As String)
m_LastName = Value
End Set
End Property
Private m_LastName As String
End Class
Public Class ToDo
Public Property Id() As Integer
Get
Return m_Id
End Get
Set(value As Integer)
m_Id = Value
End Set
End Property
Private m_Id As Integer
Public Property Description() As String
Get
Return m_Description
End Get
Set(value As String)
m_Description = Value
End Set
End Property
Private m_Description As String
Public Property IsDone() As Boolean
Get
Return m_IsDone
End Get
Set(value As Boolean)
m_IsDone = Value
End Set
End Property
Private m_IsDone As Boolean
Public Overridable Property User() As ApplicationUser
Get
Return m_User
End Get
Set(value As ApplicationUser)
m_User = Value
End Set
End Property
Private m_User As ApplicationUser
End Class
Public Class MyDbContext
Inherits IdentityDbContext(Of ApplicationUser)
Public Sub New()
MyBase.New("conn1") 'DefaultConnection
End Sub
Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
MyBase.OnModelCreating(modelBuilder)
' Change the name of the table to be Users instead of AspNetUsers
modelBuilder.Entity(Of IdentityUser)().ToTable("Users")
modelBuilder.Entity(Of ApplicationUser)().ToTable("Users")
End Sub
Public Property ToDoes() As DbSet(Of ToDo)
Get
Return m_ToDoes
End Get
Set(value As DbSet(Of ToDo))
m_ToDoes = Value
End Set
End Property
Private m_ToDoes As DbSet(Of ToDo)
Public Property MyUserInfo() As DbSet(Of MyUserInfo)
Get
Return m_MyUserInfo
End Get
Set(value As DbSet(Of MyUserInfo))
m_MyUserInfo = Value
End Set
End Property
Private m_MyUserInfo As DbSet(Of MyUserInfo)
End Class
End Namespace
UPDATE UPDATE
Based on a comment I also checked here . 根据评论,我也在这里查看 。
I don't really get why this is a role issue, since I'm reusing a connection string that is already working fine with updating other (non-identity related) tables. 我真的不明白为什么这是一个角色问题,因为我正在重用一个已经正常工作的连接字符串来更新其他(非身份相关的)表。 Also I don't get why the error refers to the
master
table as I'd expect that I'm not trying to connect to that in any way by the manager.Find
method. 此外,我不明白为什么错误引用
master
表,因为我预计我不会尝试通过manager.Find
方法以任何方式连接到该表。
Anyway, the user through which I'm currently testing is already assigned to the sysadmin
role: 无论如何,我正在测试的用户已经被分配到
sysadmin
角色:
UPDATE 2 更新2
Ok, thanks to Jeremy's comment below I'm a step closer...I needed to add user IIS APPPOOL\\.NET v4.5
to role sysadmin
, because that was the user connecting as shown in SQL Server profiler (although I'm unsure about the security risks when adding this user to this role). 好的,感谢Jeremy在下面的评论我更近了一步......我需要将用户
IIS APPPOOL\\.NET v4.5
到角色sysadmin
,因为那是用户连接,如SQL Server分析器中所示(尽管我是将此用户添加到此角色时,不确定安全风险)。 Anyway, the Find method no longer throws an error and using SQL Server profiler I see the SQL statement is fired when I execute this code Dim user As User = manager.FindByName(Trim(Username.Text))
无论如何,Find方法不再抛出错误并使用SQL Server探查器我看到执行此代码时触发了SQL语句
Dim user As User = manager.FindByName(Trim(Username.Text))
exec sp_executesql N'SELECT TOP (1)
[Extent1].[Id] AS [Id],
[Extent1].[ApplicationId] AS [ApplicationId],
[Extent1].[MobileAlias] AS [MobileAlias],
[Extent1].[IsAnonymous] AS [IsAnonymous],
[Extent1].[LastActivityDate] AS [LastActivityDate],
[Extent1].[MobilePIN] AS [MobilePIN],
[Extent1].[LoweredEmail] AS [LoweredEmail],
[Extent1].[LoweredUserName] AS [LoweredUserName],
[Extent1].[PasswordQuestion] AS [PasswordQuestion],
[Extent1].[PasswordAnswer] AS [PasswordAnswer],
[Extent1].[IsApproved] AS [IsApproved],
[Extent1].[IsLockedOut] AS [IsLockedOut],
[Extent1].[CreateDate] AS [CreateDate],
[Extent1].[LastLoginDate] AS [LastLoginDate],
[Extent1].[LastPasswordChangedDate] AS [LastPasswordChangedDate],
[Extent1].[LastLockoutDate] AS [LastLockoutDate],
[Extent1].[FailedPasswordAttemptCount] AS [FailedPasswordAttemptCount],
[Extent1].[FailedPasswordAttemptWindowStart] AS [FailedPasswordAttemptWindowStart],
[Extent1].[FailedPasswordAnswerAttemptCount] AS [FailedPasswordAnswerAttemptCount],
[Extent1].[FailedPasswordAnswerAttemptWindowStart] AS [FailedPasswordAnswerAttemptWindowStart],
[Extent1].[Comment] AS [Comment],
[Extent1].[Email] AS [Email],
[Extent1].[EmailConfirmed] AS [EmailConfirmed],
[Extent1].[PasswordHash] AS [PasswordHash],
[Extent1].[SecurityStamp] AS [SecurityStamp],
[Extent1].[PhoneNumber] AS [PhoneNumber],
[Extent1].[PhoneNumberConfirmed] AS [PhoneNumberConfirmed],
[Extent1].[TwoFactorEnabled] AS [TwoFactorEnabled],
[Extent1].[LockoutEndDateUtc] AS [LockoutEndDateUtc],
[Extent1].[LockoutEnabled] AS [LockoutEnabled],
[Extent1].[AccessFailedCount] AS [AccessFailedCount],
[Extent1].[UserName] AS [UserName]
FROM [dbo].[AspNetUsers] AS [Extent1]
WHERE ((UPPER([Extent1].[UserName])) = (UPPER(@p__linq__0))) OR ((UPPER([Extent1].[UserName]) IS NULL) AND (UPPER(@p__linq__0) IS NULL))',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'flo@outlook.com'
The strange thing is: when I execute it directly in SQL Server Management Studio I get a record returned, but in my code the variable user
is Nothing
....What can it be? 奇怪的是:当我直接在SQL Server Management Studio中执行它时,我得到一条返回的记录,但在我的代码中,变量
user
是Nothing
....它可以是什么?
You connection string contains "User Id=sa;Password=XXXX", thus that connection is attempting to use SQL Server authentication. 您的连接字符串包含“User Id = sa; Password = XXXX”,因此该连接尝试使用SQL Server身份验证。 Your SSMS login property's title bar appears to be identifying a Windows account, which implies there is a belief that Windows Authentication should be used.
您的SSMS登录属性的标题栏似乎在标识Windows帐户,这意味着有人认为应该使用Windows身份验证。 And yet the connection is attempting to use SQL Server authentication (not Windows authentication).
然而,该连接正在尝试使用SQL Server身份验证(而不是Windows身份验证)。 If not already configured, SQL Server's authentication mode can be changed to support both SQL Authentication and Windows Authentication ("Mixed Mode" authentication) see https://msdn.microsoft.com/en-us/library/ms188670.aspx .
如果尚未配置,则可以更改SQL Server的身份验证模式以支持SQL身份验证和Windows身份验证(“混合模式”身份验证),请参阅https://msdn.microsoft.com/en-us/library/ms188670.aspx 。
Alternatively, the connection string can be changed to use Windows authentication/integrated security, per https://msdn.microsoft.com/en-us/library/jj653752(v=vs.110).aspx#integratedsecurity 或者,可以将连接字符串更改为使用Windows身份验证/集成安全性,按照https://msdn.microsoft.com/en-us/library/jj653752(v=vs.110).aspx#integratedsecurity
Try this, if your application pool is running under a NETWORK SERVICE identity. 如果您的应用程序池在NETWORK SERVICE标识下运行,请尝试此操作。 Then give SysAdmin Role for “NT AUTHORITY\\NETWORK SERVICE”:
然后为“NT AUTHORITY \\ NETWORK SERVICE”授予SysAdmin角色:
Or give SysAdmin to which ever account running the app pool. 或者将SysAdmin提供给运行应用程序池的帐户。
If that doesn't work, check if any of these solutions help: CREATE DATABASE permission denied in database 'master' (EF code-first) 如果这不起作用,请检查以下任何解决方案是否有帮助: 在数据库'master'中创建数据库权限被拒绝(EF代码优先)
Edit: 编辑:
Its not very secure to give all these accounts sysAdmin. 给所有这些帐户sysAdmin不是很安全。 After you get this working tighten up the SQL security to just dbReader and dbWriter roles.
在您开始工作之后,将SQL安全性加强到dbReader和dbWriter角色。
And what is going wrong with the FindByName method?
FindByName方法出了什么问题?
Now there is no exception and the problem is that no data is returned I think there is still something going on with permissions. 现在没有异常,问题是没有数据返回我认为仍然存在权限。
Since you're using SQL Authentication in the Connection String, can you try it with Windows Integrated? 由于您在连接字符串中使用SQL身份验证,您可以尝试使用Windows集成吗? Otherwise try using the appPool IIS accounts credentials in your connection string and see if that yields a clue as to whats wrong?
否则,请尝试在连接字符串中使用appPool IIS帐户凭据,看看是否会产生错误的线索?
Why instead to utilize an identity field don´t you utilize a HASH value in a NVARCHAR() field? 为什么要使用身份字段而不是在NVARCHAR()字段中使用HASH值?
For instance: you may get an individual data from user (or a join of his fields), calculate a HASH from .NET Cryptography library and set that NVARCHAR() with the data. 例如:您可以从用户(或其字段的连接)获取单个数据,从.NET Cryptography库计算HASH并使用数据设置NVARCHAR()。
This way (and supposing you´re utilizing SHA-512 HASH) you will be able to have a Base64 string of an individual data, like an Identity itself. 通过这种方式(假设您正在使用SHA-512 HASH),您将能够拥有一个单独数据的Base64字符串,就像身份本身一样。
But, if your goal is have an identity to the momentum , you may get the user data, plus the current datetime, calculate its HASH and save this data as the record´s identity. 但是,如果您的目标与动量有一致 ,您可以获取用户数据,加上当前日期时间,计算其HASH并将此数据保存为记录的标识。
You should probably use a different SQL account than "sa" but the default database for sa is master. 您应该使用与“sa”不同的SQL帐户,但sa的默认数据库是master。 The Find method is likely using the default database for the user even though myapp is defined in the connection string.
即使在连接字符串中定义了myapp,Find方法也可能使用用户的默认数据库。
Change the default database for sa to myapp, here: 将sa的默认数据库更改为myapp,此处:
Your user should be added to the dbcreator role. 您的用户应添加到dbcreator角色。
Otherwise you're not allowed to create new databases. 否则,您不能创建新数据库。
Sysadmin/public are not enough. 系统管理员/公众是不够的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.