SQL Server表上的跨服务器查询的行丢失,可能是由于用户权限
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server表上的跨服务器查询的行丢失,可能是由于用户权限相关的知识,希望对你有一定的参考价值。
我有一个连接到数据库服务器的应用程序服务器(运行SQL Server 2014 Express)
我在Application Server上的saveEmails.sql中保存了以下查询
select
concat('<H3>Email sent: ',send_request_date,'</H3>',body)
from
msdb.dbo.sysmail_allitems
where
send_request_date > dateadd(day, -1, getdate())
order by
send_request_date desc
我在Application Server上的批处理文件中保存了以下内容
sqlcmd -S <ip,port> -y0 -U tomcat -P <password> -i saveEmails.sql -o
"C: empsaveEmailsOutput.htm"
我做了GRANT SELECT ON msdb.dbo.sysmail_allitems to TOMCAT
当我通过SSMS在数据库服务器上运行查询时,我得到表中的所有行。
当我通过sqlcmd在应用程序服务器上运行查询时,我只获取sysmail_allitems.send_request_user = tomcat的行
如何查看所有行,而不仅仅是send_request_user = tomcat?
msdb.dbo.sysmail_allitems
是一个视图,并且实现了Row-level security,这限制了正在查看由该用户执行的那些行的用户。
在msdb.dbo.sysmail_mailitems
上运行查询,qazxswpoi是一个表,并且没有实现行级安全性。
请注意,SQL Server 2014不支持表上的行级安全性,但SQL Server 2016不支持。
以上是关于SQL Server表上的跨服务器查询的行丢失,可能是由于用户权限的主要内容,如果未能解决你的问题,请参考以下文章
Access 中 SQL 链接表上的 UPDATE 查询的“操作必须使用可更新查询”
Hive Server 2 / Beeline 在 HBase 表上的 Hive 上不返回具有 INNER JOIN 的行
sql server查询结果集复制出来的行数和在SSMS上的行数不一致