我有一个连接到数据库服务器的应用程序服务器(运行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?
msdb.dbo.sysmail_allitems
是一个视图,并且实现了Row-level security,这限制了正在查看由该用户执行的那些行的用户。
在msdb.dbo.sysmail_mailitems
上运行查询,qazxswpoi是一个表,并且没有实现行级安全性。
请注意,SQL Server 2014不支持表上的行级安全性,但SQL Server 2016不支持。