0

计划任务通过命令行脚本进行地理编码,因此需要访问存储在 Microsoft SQL Server 中的一些数据(地理编码的地址)。

该数据属于模式A,由来自多个表的数据组成。

我想过

  • 创建 sql server 登录名、模式和用户B
  • 创建从A.TABLE_XA.TABLE_Y中选择的视图A.VIEW1
  • 授予对A.VIEW1 TO B的SELECT权限

由于视图引用了其他表,因此从A.VIEW1中选择B会引发权限错误:

对象“ A.TABLE_X ”、数据库“...”、架构“...”的SELECT 权限被拒绝。

在A.TABLE_X , A.TABLE_Y , ... TO B上是否有任何替代 GRANT SELECT 的方法?因为如果我这样做,B可以从这些表中读取所有数据,不是吗?

我不希望B能够这样做,因为B的 sql server 凭据将以明文形式存储在文件系统或任务调度程序中。(有什么选择吗?)

A.TABLE_XA.TABLE_Y包含与客户相关的数据,例如银行帐号等。我可以将 GRANT 限制为特定列,但我仍然不喜欢这个想法。

另一种方法是之前使用存储的过程 A.PROC_FILL填充临时表,但是将 EXEC 授予B也不够,不是吗?

4

1 回答 1

0

如果您向用户授予exec存储过程的权限,则默认情况下,用户将能够使用创建者的权限运行该过程并查看结果,而无需对基础表的权限。reportprocreport_user

该过程可能只是一个select,而不是填充一个表。

create proc reportproc as
begin
    select * from a.table_x inner join a.table_y on tablex.id = table_y.id
end
go
grant exec on reportproc to reportuser

对于来自不同模式的表的视图,情况会稍微复杂一些。请参阅http://msdn.microsoft.com/en-us/library/ms188676.aspx

于 2013-08-06T12:05:13.813 回答