Jer*_*emy 6 sql-server stored-procedures sql-server-2008-r2
SQL Server 2008 R2:通常,我们创建表和存储过程,并授予用户对存储过程的执行权限.我们永远不必授予表或视图的特定权限,因为如果用户可以执行存储过程,则SQL Server会推断应该允许存储过程执行select/insert/update语句.运行良好,因为我们只处理一个模式,但现在我们有一个场景,其中表在一个模式中,但存储过程在另一个模式中.当用户执行存储过程时,它们会收到错误:
消息229,级别14,状态5,过程teststoredprocedure,第7行对象'testtable',数据库'testdatabase',schema'testschema'上的SELECT权限被拒绝.
teststoredprocedure与...不同的架构testtable.是否可以允许存储过程从表中进行选择,而无需授予用户对这些表的特定权限?
您需要授予存储过程的所有者WITH GRANT对该表的访问权限。
通常,模式由与模式同名的角色拥有,因此要允许storedprocschema.teststoredprocedure访问表,将是:
GRANT SELECT on testschema.testtable TO storedprocschema WITH GRANT
Run Code Online (Sandbox Code Playgroud)
当且仅当表与过程位于同一数据库中时,这才应该起作用。
要使用不同数据库中的表获得相同的结果,您可以:
启用“跨数据库所有权链接”
将过程移动到另一个数据库,并在原始数据库中有一个调用它的填充过程。然后管理这两个过程的权限。
| 归档时间: |
|
| 查看次数: |
7780 次 |
| 最近记录: |