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上的行数不一致

SQL Server 复制(跨数据库查询和约束)

SQL Server "<>" 运算符与具有几百万行的表上的 "=" 相比非常慢

SQL Server 2008 查找丢失的行 [重复]