sql-server - 存储过程调用不同架构中的数据

标签 sql-server stored-procedures sql-server-2008-r2

SQL Server 2008 R2:通常,我们创建表和存储过程,并授予用户对存储过程的执行权限。我们永远不必向表或 View 授予特定权限,因为如果用户可以执行存储过程,SQL Server 就会推断应该允许存储过程执行 select/insert/update 语句。效果很好,因为我们只处理一个模式,但现在我们遇到了一种情况,其中表位于一个模式中,但存储过程位于另一个模式中。当用户执行存储过程时,他们会收到错误:

Msg 229, Level 14, State 5, Procedure teststoredprocedure, Line 7 The SELECT permission was denied on the object 'testtable', database 'testdatabase', schema 'testschema'.

teststoredproceduretesttable 的架构不同。是否可以允许存储过程从表中进行选择,而不授予用户对这些表的特定权限?

最佳答案

您需要向存储过程的所有者授予WITH GRANT对该表的访问权限。

通常,架构由与架构同名的角色拥有,因此要允许 storedprocschema.teststoredprocedure 访问表,则:

GRANT SELECT on testschema.testtable TO storedprocschema WITH GRANT

当且仅当表与过程位于同一数据库中时,这才应该起作用。

要使用不同数据库中的表获得相同的结果,您可以:

  • 启用“跨数据库所有权链接”

  • 将该过程移动到另一个数据库,并在原始数据库中有一个调用它的填充过程。然后管理这两个过程的权限。

关于sql-server - 存储过程调用不同架构中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8511140/

相关文章:

C# SQL 查询结果到文本框

sql-server - 为什么在分区 'SWITCH' 语句中源和目标必须驻留在同一文件组中?

mysql - mysql添加search_column函数

php - 存储过程、MySQL 和 PHP

sql-server - SQL Server 2008 R2 : Tricky query - Finding certain rows in segments of rows

sql-server - CREATE SEQUENCE 的 CACHE 选项是如何工作的?

sql - 将存储过程传递给 sp_send_dbmail

sql-server - SQL Server SSIS 和 Oracle 数据泵

SQL 幂等性

sql - 使用 native 客户端驱动程序从 Delphi 代码创建触发器