【问题标题】:SQL Server: problem with synonym per user created by a stored procedureSQL Server:存储过程创建的每个用户的同义词问题
【发布时间】:2011-07-05 06:50:59
【问题描述】:

我有几个存储过程(worker procs),它们将被一个名为Calc 的主存储过程查询。 Calc 为表创建一个名为S 的同义词,其名称由参数传递。

worker procs 使用同义词表。

适用于管理员登录。

问题:如果用户执行Calc,同义词将是Domain/Username.S,访问S的工作人员找不到Domain/username.S

如果管理员创建了同义词,则称为dbo.S,并且工作人员仅通过访问S 来工作。

worker 存储过程如何访问由名为Calc 的用户创建的同义词? 这样 X 用户可以调用 Calc 并在不同的表上操作 S 但使用相同的工作进程。

提前谢谢你,希望有人可以帮助我。

环境:SQL Server 2008 授予用户权限:创建同义词

【问题讨论】:

  • 我用一个不漂亮的 WORKAROUND 解决了这个问题。同义词表被删除,Calc 现在得到一个表名作为参数,该参数传递给工作进程。这些现在将使用动态 SQL 处理传递的表。它现在和同义词一样好,但它有效。

标签: database sql-server-2008 stored-procedures synonym


【解决方案1】:

在创建 calc、执行 calc、创建 S 和调用 S 时使用架构前缀。或者确保您的所有用户都可以访问相同的默认架构。但我更喜欢前者。

【讨论】:

  • 架构前缀取决于 calc 的执行用户。那么工作进程如何知道这个前缀来调用 prefix.S 呢?
  • 如果您创建 dbo.Calc,则用户调用 dbo.Calc。您是说您有多个具有不同架构的 Calc 副本?
  • 创建 S 的不同副本的 Calc 的一个副本 User1:exec Calc -> user1.S is created worker 应该在这个 User2 上工作:exec Calc -> user2.S is created Calc 的 worker 应该做这个
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 2014-01-11
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 2022-11-11
  • 2013-08-14
  • 1970-01-01
相关资源
最近更新 更多