ASP.NET Core EF访问SQL Server跨库视图触发权限报错如何解决?
问题解决办法
报错原因是你当前连接DatabaseA使用的userA账户,没有访问DatabaseB的权限,根据你的部署场景选择对应解决方案即可:
场景1:DatabaseA与DatabaseB部署在同一个SQL Server实例
直接给userA授予DatabaseB的访问权限即可,用SQL Server管理员账户执行以下SQL:
-- 切换到DatabaseB USE DatabaseB GO -- 创建userA对应的数据库用户 CREATE USER userA FOR LOGIN userA GO -- 授予视图所需的表查询权限,按需调整权限范围 GRANT SELECT ON SCHEMA::dbo TO userA GO
如果视图涉及写入操作,额外授予INSERT/UPDATE/DELETE对应权限即可。
场景2:DatabaseB部署在独立的SQL Server实例(跨服务器访问,已配置链接服务器)
需要给链接服务器配置userA到远程实例的权限映射,用SQL Server管理员账户在SQL Server A上执行以下SQL:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'你配置的指向SQL Server B的链接服务器名称', @useself = N'False', @locallogin = N'userA', @rmtuser = N'userB', @rmtpassword = N'userB的密码';
如果配置后仍有报错,可以开启链接服务器的RPC权限:
EXEC master.dbo.sp_serveroption @server=N'指向SQL Server B的链接服务器名称', @optname=N'rpc', @optvalue=N'true'; EXEC master.dbo.sp_serveroption @server=N'指向SQL Server B的链接服务器名称', @optname=N'rpc out', @optvalue=N'true';
验证方式
配置完成后先用SSMS以userA账户登录,直接查询跨库视图确认能正常返回结果,再重启ASP.NET Core项目即可,你的现有代码和连接字符串不需要做任何修改。
内容的提问来源于stack exchange,提问作者user13717625
相关产品推荐
相关产品推荐

