我需要查询一个专有数据库,其中软件供应商对每个模式设置了严格的权限(每个模式一个用户名),并且每个模式用户只允许从他们自己的模式中读取。
我现在需要跨多个模式运行查询。是否可以针对多个用户帐户运行单个查询?像EXEC AS USER 'A' AND 'B'
什么?
显然,正确的方法是创建一个具有所有必需权限的用户,但我是从一个独立的实用程序运行查询,并且对我未来的客户实例没有管理员权限。
我需要查询一个专有数据库,其中软件供应商对每个模式设置了严格的权限(每个模式一个用户名),并且每个模式用户只允许从他们自己的模式中读取。
我现在需要跨多个模式运行查询。是否可以针对多个用户帐户运行单个查询?像EXEC AS USER 'A' AND 'B'
什么?
显然,正确的方法是创建一个具有所有必需权限的用户,但我是从一个独立的实用程序运行查询,并且对我未来的客户实例没有管理员权限。
不,你不能。
您可以创建具有 A 和 B 权限的用户 C...
您可以研究的另一个建议是SQL 所有权链。
通过所有权链接,可以创建具有访问对象权限的存储过程。然后,用户可以被授予对 SP 的执行权限,而无需对访问对象的显式权限。
您可以使用不同的方法,即代码签名。通过代码签名,一个过程可以被授予提升的权限,在您的情况下,您可以使用证书对过程进行签名,然后创建一个证书派生用户并将该用户添加到 db_owner 角色。这样过程就获得了事实上的 dbo 特权。对于应用程序执行的每个操作,您都需要一个单独的过程。
当然,部署这些过程、证书、证书派生用户和签名需要提升权限才能开始,但这通常通过要求应用程序设置在提升的上下文中运行来解决。