【发布时间】:2019-09-05 15:48:11
【问题描述】:
我目前正在构建一个解决方案,其中多个小型应用程序运行单个 SQL 服务器数据库,每个数据库都有自己的登录名和默认架构。此解决方案工作正常,但我需要确保安全。应用程序有一个“设计器”元素,我需要仅将创建/更改/删除表权限授予默认模式。
我在网上找到了一些解决方案,但在测试过程中没有一个真正适合我。
我在 Azure 上运行 sql server 12.0。我用它的模式“DemoApp”创建了一个用户“DemoApp”
解决方案1:将用户设置为架构的所有者,并限制对架构外的选择等的访问,但由于ALTER权限,用户可以删除/更改其他架构的表。
ALTER AUTHORIZATION ON SCHEMA::DemoApp to DemoApp;
GRANT CREATE TABLE, ALTER TO DemoApp;
解决方案 2:将架构的所有者更改为 dbo,并且只允许架构内的特定权限。
ALTER AUTHORIZATION ON SCHEMA::DemoApp to dbo;
GRANT CREATE TABLE TO DemoApp;
GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW DEFINITION ON SCHEMA::DemoApp TO DemoApp
根据在线帖子,这个解决方案应该可以工作,但我仍然得到 尝试在 DemoApp 登录下创建表时出现“数据库中的 CREATE TABLE 权限被拒绝”。
我想在单个数据库上安全地运行多个应用程序,其中每个登录名/用户都被限制在其默认架构中,并完全控制其中的对象。
任何建议将不胜感激。提前致谢。
【问题讨论】:
标签: sql-server