使用.net core框架创建ASP.NET Core API应用程序,利用Entity Framework core实体进行MS LocalDB数据库进行连接操作(增/删/改/查运行)。
问题:
在Visual Studio 2022 开发工具可以正常运行 Web API 应用程序连接 LocalDB 数据库进行相关操作,但部署到IIS服务器里就出现:Login failed for user 'IIS APPPOOL\sqdy'. 错误提示,如下:
解决方案:
IIS配置的应用程序池标识的内置账户(ApplicationPoolIdentity)没有数据库(LocaDB)访问管理权限,需要为其在数据库创建登录用户和授权,如下SQL:
--创建 [IIS APPPOOL\sqdy]登录用户
CREATE USER [IIS APPPOOL\sqdy]
FOR LOGIN [IIS APPPOOL\sqdy]
WITH DEFAULT_SCHEMA = dbo;
Go
--为[IIS APPPOOL\sqdy]用户添加'db_owner'角色
EXEC sp_addrolemember 'db_owner', 'IIS APPPOOL\sqdy';
GO
若出现“Local Database Runtime error occurred. 无法获取本地应用程序数据路径。很可能是因为未加载用户配置文件。如果在 IIS 下执行 LocalDB,请确保为当前用户启用配置文件加载。”错误提示,则将IIS>>应用程序池>>高级设置>>加载用户配置文件 设定为“True”。
可通过以下命令来操作SQLLocalDB数据库:
sqllocaldb.exe [versions | v ]:查看当前安装LocalDB数据库版本
sqllocaldb.exe [info | i ]:查询当前所有数据库实例
sqllocaldb.exe [create | c ] "[实例名]" :创建新实例
sqllocaldb.exe [delete | d ] "[实例名]":删除实例
sqllocaldb.exe [start | s ] "[实例名]" :启动实例
sqllocaldb.exe [stop | p ] "[实例名]" :停止实例
sqllocaldb.exe [help | -? ] :显示 sqllocaldb.exe 命令的帮助信息
sqllocaldb.exe [share | h] "[实例名]" "[共享私有实例名]" :共享实例(使用指定的共享名称共享指定的 LocalDB 私有实例)
sqllocaldb.exe [unshare | u] "[共享私有实例名]" :取消共享实例(停止共享指定的 LocalDB共享实例)
-----------------------------------------------------------------------------------
创建LocalDB示例:
-- 创建实例
sqllocaldb.exe create "LocalDB_TT"
-- 共享实例
sqllocaldb.exe share "LocalDB_TT" \"LocalDB_TT_Share"
-- 启动实例
sqllocaldb.exe start LocalDB_TT
-- 停止实例
sqllocaldb.exe stop LocalDB_TT
-- 取消共享实例
sqllocaldb.exe unshare LocalDB_TT_Share
提供给IIS服务器访问建议使用LocalDB共享数据。
共享实例连接字符串:
Data Source=(LocalDb)\\.\\LocalDB_TT_Share;AttachDbFilename=C:\\Users\\zhidong\\AppData\\Local\\Microsoft\\Microsoft SQL Server Local DB\\Instances\\LocalDB_TT\\TT.mdf;Integrated Security=true;Trusted_Connection=True;MultipleActiveResultSets=true
注:若要连接到某一 LocalDB 共享实例,请将 \.\(反斜杠 + 句点 + 反斜杠)添加到连接字符串以便引用为共享实例保留的命名空间。
LocalDb 数据库连接字符串:
Data Source=(LocalDb)\\LocalDB_TT;AttachDbFilename=C:\\Users\\zhidong\\AppData\\Local\\Microsoft\\Microsoft SQL Server Local DB\\Instances\\LocalDB_TT\\TT.mdf;Integrated Security=true;Trusted_Connection=True;MultipleActiveResultSets=true