我正在创build一个多租户应用程序,它将利用具有多个模式的单个数据库。 每个租户都有自己的login/密码。 我能够限制对特定模式的查看权限。
我遇到的唯一问题是更新模式。 目前我有我的C#代码login使用适当的架构凭据,然后运行SQL代码,只要我想更新一个特定的(或所有)架构。
起初,我试图改变表格,然后意识到我没有足够的权限。 所以我再次调整了权限。 现在,我正在尝试在所有模式中添加全文索引,并告诉我我没有权限。
我的问题很简单,我怎样才能定义一个用户的权限作为the database owner for a specific schema这样我就不会有在数据库上运行的任何脚本的问题。
GRANT CONTROL ON SCHEMA::<schemaname> TO <username>; 将授予适用于模式和模式包含对象的所有权限。 但是,它不会授予任何适用于非模式对象的权限。 例如,它不适用于不是模式绑定对象的全文目录(您在创buildFT目录时不指定模式),并且需要特殊的CREATE FULLTEXT CATALOG权限。
在你的情况下,你必须审查你的整个安全模型,并决定什么权限和行动是必须/允许给租户。 没有一个简单的万能答案。 如果您授予您的租户自由充当db_owner,那么您必须授予他们一个真正的数据库。 你将无法潜入模式,并假装是一个数据库。 SQL安全模型就是这样工作的,你最好一起玩,而不是试图绕过它。
我不认为这是可能的。 如果他们是dbo,那么他们可以在数据库中做任何必要的事情。 如果他们不是dbo,他们是有限的。 数据库所有者意味着 – 数据库的所有者。