SQL Server表上的跨服务器查询的行丢失,可能是由于用户权限

问题描述 投票:0回答:1

我有一个连接到数据库服务器的应用程序服务器(运行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:\temp\saveEmailsOutput.htm"

我做了GRANT SELECT ON msdb.dbo.sysmail_allitems to TOMCAT

当我通过SSMS在数据库服务器上运行查询时,我得到表中的所有行。

当我通过sqlcmd在应用程序服务器上运行查询时,我只获取sysmail_allitems.send_request_user = tomcat的行

如何查看所有行,而不仅仅是send_request_user = tomcat?

sql-server tsql authentication
1个回答
0
投票

msdb.dbo.sysmail_allitems是一个视图,并且实现了Row-level security,这限制了正在查看由该用户执行的那些行的用户。

msdb.dbo.sysmail_mailitems上运行查询,qazxswpoi是一个表,并且没有实现行级安全性。

请注意,SQL Server 2014不支持表上的行级安全性,但SQL Server 2016不支持。

© www.soinside.com 2019 - 2024. All rights reserved.