如何确定Integrated Security运行所用用户身份?解决EF Core权限报错
解决方法:查询当前操作数据库的用户身份
因为你的连接字符串使用Integrated Security=True,意味着是当前运行EF命令/程序的Windows用户在访问数据库。以下是几种直接查询该用户身份的实用方法:
方法1:通过程序临时查询
在你的项目中临时添加一段代码,执行SQL查询获取当前用户信息,运行后即可看到结果:
using (var context = new YourDbContext()) { var userResult = context.Database.SqlQuery<(string LoginName, string DbUser)>("SELECT SYSTEM_USER, CURRENT_USER").First(); Console.WriteLine($"登录用户:{userResult.LoginName}"); Console.WriteLine($"数据库用户:{userResult.DbUser}"); }
说明:
SYSTEM_USER返回SQL Server登录名(Windows用户格式通常为DOMAIN\Username),CURRENT_USER是该登录名映射到MyDb数据库的本地用户账号。
方法2:通过EF Core命令直接执行查询
如果使用.NET CLI,直接在命令行运行:
dotnet ef database execute "SELECT SYSTEM_USER, CURRENT_USER;" --project 你的项目名称
如果使用Visual Studio的Package Manager Console,执行:
Invoke-SqlCmd -ServerInstance "dev-db,1433" -Database "MyDb" -IntegratedSecurity -Query "SELECT SYSTEM_USER, CURRENT_USER;"
方法3:在数据库服务器端查询活跃会话
登录到数据库服务器的SQL Server Management Studio,执行以下查询,找到对应你开发机(host_name为你的开发机名称)的会话,即可看到登录用户:
SELECT login_name AS '登录用户名', host_name AS '客户端机器名', program_name AS '客户端程序' FROM sys.dm_exec_sessions WHERE database_id = DB_ID('MyDb') AND host_name = '你的开发机名称';
确认用户身份后,在数据库服务器上给该用户授予db_ddladmin角色权限(或更精细的CREATE TABLE权限),即可解决CREATE TABLE permission denied的问题。
内容的提问来源于stack exchange,提问作者NovaDev
相关产品推荐
相关产品推荐

