gpt4 book ai didi

SQL Server 存储过程和权限与其他数据库

转载 作者:搜寻专家 更新时间:2023-10-30 20:26:59 27 4
gpt4 key购买 nike

我正在为一些新用户配置数据库帐户。我提出了以下解决方案,这是让帐户正常工作的 99% 的方法,但我遇到了一个我无法解决的问题。

首先,我创建了一个使用 SQL Server 身份验证的新登录名,然后授予他们对所有存储过程的 EXECUTE 权限。这允许他们运行所有这些,但他们无法查看代码,也无法查看数据库表。

在存储过程中,我添加了以下内容:

WITH EXEC AS OWNER

这允许存储过程作为我们通常使用的默认帐户运行,并且具有 db_owner 的角色。这允许新用户运行所有存储过程并且在我遇到以下问题之前效果很好:

一些存储过程(所有这些都使用动态 SQL)调用一些同义词,这些同义词链接到其他两个数据库(历史数据库和数据集市数据库)中的表。这给了我以下错误:

The server principal "{username}" is not able to access the database "{database name}" under the current security context.

我在 WITH EXEC AS 中使用的帐户是我正在使用的所有三个数据库的 db_owner

我该怎么做才能解决这个问题?非常感谢

最佳答案

EXECUTE AS Owner 是一个数据库沙箱。想想看,它必须是。否则,数据库 管理员可以发布并EXECUTE AS USER = 'somesystemadmin' 并将自己提升为实例 级管理员。详细信息在 Extending Database Impersonation by Using EXECUTE AS 中描述。 :

when impersonating a principal by using the EXECUTE AS USER statement, or within a database-scoped module by using the EXECUTE AS clause, the scope of impersonation is restricted to the database by default. This means that references to objects outside the scope of the database will return an error.

解决方案很简单:签署程序。参见 Call a procedure in another database from an activated procedure举个例子。在 Module Signing 阅读更多内容和 Signing Stored Procedures in SQL Server .

关于SQL Server 存储过程和权限与其他数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28699072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com