我正在创建一个多租户应用程序,它将使用具有多个架构的单个数据库。每个租户都有各自的登录名/密码。我能够将查看权限限制到特定架构。
我唯一一直遇到的问题是更新架构时。目前,我使用正确的架构凭据登录 C# 代码,然后每当我想更新特定(或所有)架构时,就运行 SQL 代码。
起初,我尝试更改表,然后意识到我没有足够的权限。所以我再次调整了权限。现在,我尝试在所有架构上添加全文索引,但它告诉我我没有权限。
我的问题很简单,如何定义用户的权限,以便the database owner for a specific schema
在数据库上运行的任何脚本不会出现任何问题。
答案1
GRANT CONTROL ON SCHEMA::<schemaname> TO <username>;
将授予所有权限适用于架构和架构包含的对象。但是,它不会授予任何适用于非架构对象的权限。例如,它不适用于全文目录,因为全文目录不是模式绑定对象(创建 FT 目录时未指定模式)并且需要特殊CREATE FULLTEXT CATALOG
权限。
在您的案例中,您必须检查整个安全模型,并决定您的租户需要/允许哪些权限和操作。没有简单的一刀切答案。如果您授予租户像完整 db_owner 一样行事的自由,那么您必须授予他们一个真正的数据库。您将无法偷偷进入架构并假装它是一个数据库。SQL 安全模型不是那样工作的,您最好顺其自然,而不是试图规避它。
答案2
我认为这是不可能的。如果他们是 dbo,那么他们可以在该数据库中执行任何必要的操作。如果他们不是 dbo,则他们的操作会受到限制。数据库所有者的意思就是 - 该数据库的所有者。