【发布时间】:2011-09-24 11:16:25
【问题描述】:
我目前正在开发一种基础架构,该基础架构将允许我们为多个应用程序提供一个数据库,这些应用程序都共享一组公共实体(表)。每个模式都通过 ORM 映射到一组域对象。
这个想法是有一个管理类型的应用程序来管理一组常见的实体。每个其他应用程序都有自己的实体模式,但此外它只能读取公共集中的实体。由于这些应用程序中的每一个都有自己的数据库登录名和对其指定架构的架构所有权,因此最初这会导致通用架构为所有这些登录名授予只读权限。
或许简单来说,我们有以下三种模式:
- 常见
- Schema_A
- Schema_B
和应用程序:
管理应用:
- 登录管理员
- 架构 Common 的所有权
- 域模型通用
应用 A:
- 登录A
- Schema_A 的所有权
- 只读模式公共所有权
- 域模型Model_A
- 域模型通用
应用 B:
- 登录B
- Schema_B 的所有权
- 只读模式 Common
- 域模型Model_B
- 域模型通用
上述场景相当简单:为登录 A 和 B 添加对模式 Common 的 SELECT 权限。
但是假设我现在想授予应用程序 A 权限以插入、删除、更新模式 Common 中的特定表。为清楚起见,假设我们有一个名为 Files 的表,任何应用程序都可以将其插入。
我设法完成这项工作的唯一方法是授予登录 A 所有这些架构权限。如果我只授予它对 Common 模式中的表 Files 的权限,它将在运行时被拒绝权限。悬停现在这样做会授予登录 A 对架构中所有表的所有权限 - 这并不是真正可取的。
如何或在何处授予所需的权限以使其仅适用于特定表?
【问题讨论】:
标签: sql-server sql-server-2008 permissions schema